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 7.587 mal aufgerufen.
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv (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. |
sevPopUp 1.0 DLL ![]() Dynamische Kontextmen?s! Erstellen Sie mit nur wenigen Zeilen Code Kontextmen?s dynamisch zur Laufzeit. Vordefinierte Styles (XP, Office, OfficeXP oder Vista) erleichtern die Anpassung an die eigenen Anwendung... Tipp des Monats Dieter Otter Kompletten Inhalt eines ADO-Recordsets schnell in einen String einlesen Mit Hilfe der GetString-Methode des ADO-Recordset Objekts lässt sich der gesamte Inhalt des Recordsets schnell in einen String "umwandeln". Neu! sevISDN 1.0 ![]() ?berwachung aller eingehender Anrufe! Die DLL erkennt alle ?ber die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung 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. |
|||||||||||||||||



RichTextBox um ein Standard-Kontextmen? erweitern


