كيفية القيام بما يلي: وضع قائمة السياق المحددة في RichTextBox

يوضح هذا المثال كيفية وضع قائمة السياق المحددة لـ RichTextBox.

عند تطبيق قائمة سياق محددة للحصول RichTextBox ، تعتبر مسؤولاً عن معالجة موضع قائمة السياق. بشكل افتراضي، يتم فتح قائمة سياق مخصصة في وسط RichTextBox.

مثال

لتجاوز سلوك تعيين الموضع الافتراضي, أضف وحدة إصغاء ل ContextMenuOpening الحدث. يوضح المثال التالي كيفية تنفيذ ذلك برمجياً.

            AddHandler richTextBox.ContextMenuOpening, AddressOf richTextBox_ContextMenuOpening
richTextBox.ContextMenuOpening += new ContextMenuEventHandler(richTextBox_ContextMenuOpening);

يظهر المثال التالي تطبيق ContextMenuOpening حدث وحدة الإصغاء المطابق.

        ' This method is intended to listen for the ContextMenuOpening event from a RichTextBox.
        ' It will position the custom context menu at the end of the current selection.
        Private Sub richTextBox_ContextMenuOpening(ByVal sender As Object, ByVal e As ContextMenuEventArgs)
            ' Sender must be RichTextBox.
            Dim rtb As RichTextBox = TryCast(sender, RichTextBox)
            If rtb Is Nothing Then
                Return
            End If

            Dim contextMenu As ContextMenu = rtb.ContextMenu
            contextMenu.PlacementTarget = rtb

            ' This uses HorizontalOffset and VerticalOffset properties to position the menu,
            ' relative to the upper left corner of the parent element (RichTextBox in this case).
            contextMenu.Placement = PlacementMode.RelativePoint

            ' Compute horizontal and vertical offsets to place the menu relative to selection end.
            Dim position As TextPointer = rtb.Selection.End

            If position Is Nothing Then
                Return
            End If

            Dim positionRect As Rect = position.GetCharacterRect(LogicalDirection.Forward)
            contextMenu.HorizontalOffset = positionRect.X
            contextMenu.VerticalOffset = positionRect.Y

            ' Finally, mark the event has handled.
            contextMenu.IsOpen = True
            e.Handled = True
        End Sub
// This method is intended to listen for the ContextMenuOpening event from a RichTextBox.
// It will position the custom context menu at the end of the current selection.
void richTextBox_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
    // Sender must be RichTextBox.
    RichTextBox rtb = sender as RichTextBox;
    if (rtb == null) return;

    ContextMenu contextMenu = rtb.ContextMenu;
    contextMenu.PlacementTarget = rtb;

    // This uses HorizontalOffset and VerticalOffset properties to position the menu,
    // relative to the upper left corner of the parent element (RichTextBox in this case).
    contextMenu.Placement = PlacementMode.RelativePoint;

    // Compute horizontal and vertical offsets to place the menu relative to selection end.
    TextPointer position = rtb.Selection.End;

    if (position == null) return;

    Rect positionRect = position.GetCharacterRect(LogicalDirection.Forward);
    contextMenu.HorizontalOffset = positionRect.X;
    contextMenu.VerticalOffset = positionRect.Y;

    // Finally, mark the event has handled.
    contextMenu.IsOpen = true;
    e.Handled = true;
}

راجع أيضًا:

المبادئ

نظرة عامة على RichTextBox

نظرة عامة حول مربع نص