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() ... Dieser Tipp wurde bereits 18.380 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats Mai 2024 Hermann Röttger Wochentage eines Datumsbereichs ermitteln Wochentage eines Datumsbereichs ermitteln, optional mit Feiertagsberechnung Neu! sevEingabe 3.0 Einfach stark! Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |