vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · TextBox & RichTextBox   |   VB-Versionen: VB200803.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 OtterBewertung:  Views:  15.609 
www.tools4vb.deSystem:  Win2k, WinXP, Vista, Win7, Win8, Win10 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()
...



Anzeige

Kauftipp Unser Dauerbrenner!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.
 
 
Copyright ©2000-2019 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


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.