Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB2008 | 03.02.10 |
RichTextBox um ein Standard-Kontextmenü erweitern Mit dieser Erweiterung (Extension-Methode) fügen Sie dem RichTextBox-Control ab sofort ein Standard-Kontextmenü mit den Befehlen Rückgängig, Ausschneiden etc. hinzu. | ||
Autor: Dieter Otter | Bewertung: | Views: 18.333 |
www.tools4vb.de | System: Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Eigenartig: im Gegensatz zur Standard TextBox verfügt das RichTextBox-Control über kein integriertes Kontextmenü mit den Befehlen "Ausschneiden", "Einfügen", "Kopieren" etc.
Daher möchten wir Ihnen heute eine kleine, aber feine Erweiterungs vorstellen, die jedem RichTextBox-Control "fast automatisch" ein Standard-Kontextmenü hinzufügt. Alles, was Sie tun müssen, ist die Extension-Methode entsprechend im Form_Load Ereignis der Form aufzurufen:
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load ' Standard-Kontextmenü hinzufügen RichTextBox1.AddContextMenu() End Sub
Die Erweiterungs-Methode AddContextMenu lagern wir in einem Modul aus:
Module Module1 <System.Runtime.CompilerServices.Extension()> _ Public Sub AddContextMenu(ByVal rtb As RichTextBox) ' Kontextmenü mit Ereignishändler erstellen Dim oMenu As New ContextMenuStrip AddHandler oMenu.Opening, AddressOf ContextMenuOpening ' Kontextmenü-Einträge erstellen oMenu.Items.Add("Rückgängig").Tag = "Undo" oMenu.Items.Add("-") oMenu.Items.Add("Ausschneiden").Tag = "Cut" oMenu.Items.Add("Kopieren").Tag = "Copy" oMenu.Items.Add("Einfügen").Tag = "Paste" oMenu.Items.Add("Löschen").Tag = "Del" ' Ereignishandler für das ItemClicked-Event zuweisen AddHandler oMenu.ItemClicked, AddressOf ContextMenuItemClicked ' Kontextmenü dem RichTextBox-Control zuweisen rtb.ContextMenuStrip = oMenu End Sub
' Wenn das Kontextmenü angezeigt wird, prüfen wir, welche ' Befehle aus dem Menü heraus möglich sind... Private Sub ContextMenuOpening(ByVal sender As Object, _ ByVal e As System.ComponentModel.CancelEventArgs) Dim oMenu As ContextMenuStrip = CType(sender, ContextMenuStrip) Dim rtb As RichTextBox = CType(oMenu.SourceControl, RichTextBox) oMenu.Items(0).Enabled = rtb.CanUndo oMenu.Items(2).Enabled = (rtb.SelectionLength > 0) oMenu.Items(3).Enabled = (rtb.SelectionLength > 0) oMenu.Items(4).Enabled = (Clipboard.ContainsText()) oMenu.Items(5).Enabled = (rtb.SelectionLength > 0) End Sub
' Bei Auswahl eines Eintrags aus dem Kontextmenü... Private Sub ContextMenuItemClicked(ByVal sender As Object, _ ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) Dim rtb As RichTextBox = CType(sender.SourceControl, RichTextBox) ' ... je nach Auswahl, erforderliche Aktion ausführen Select Case e.ClickedItem.Tag Case "Undo" rtb.Undo() Case "Cut" rtb.Cut() Case "Copy" rtb.Copy() Case "Paste" rtb.Paste() Case "Del" rtb.SelectedText = "" End Select End Sub
End Module
Diese Erweiterungsmethode lässt sich jetzt auf alle RichTextBox-Controls innerhalb Ihres Projekts anwenden:
' Standard-Kontextmenü hinzufügen RichTextBox1.AddContextMenu() RichTextBox2.AddContextMenu() RichTextBox3.AddContextMenu() ...