Postup: Jak umístit vlastní kontextovou nabídku do RichTextBoxu
Tento příklad ukazuje, jak zobrazit vlastní místní nabídku pro RichTextBox.
Při implementaci vlastní místní nabídky pro RichTextBox, zodpovídáte za zpracování umístění místní nabídky. Ve výchozím nastavení se uživatelsky definovaná místní nabídka otevře ve středu RichTextBox.
Přidat naslouchací prvek pro událost ContextMenuOpening
Pokud chcete přepsat výchozí chování umístění, přidejte naslouchací proceduru pro událost ContextMenuOpening. Následující příklad ukazuje, jak to provést programově.
richTextBox.ContextMenuOpening += new ContextMenuEventHandler(richTextBox_ContextMenuOpening);
AddHandler richTextBox.ContextMenuOpening, AddressOf richTextBox_ContextMenuOpening
Implementace naslouchacího procesu událostí ContextMenuOpening
Následující příklad ukazuje implementaci odpovídajícího nasloucháče událostí 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.
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;
}
' 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
Viz také
- Přehled RichTextBox
- Přehled textového pole
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.
.NET Desktop feedback