Rubrik: Controls · TextBox & RichTextBox | VB-Versionen: VB5, VB6 | 09.06.05 |
Folgendes Szenario: Sie verwenden statt einer normalen TextBox ein RichTextBox-Control. Über ein Menü stellen Sie dem Anwender auch Befehle zum Kopieren und Einfügen von Text zur Verfügung. Den beiden Menübefehlen haben Sie zudem die gängigen Shortcuts Strg+C und Strg+V zugewiesen. Verwendet man jetzt aber bspw. direkt innerhalb des RTF-Controls den Shortcut Strg+V, so wird der Inhalt der Zwischenablage doppelt eingefügt Grund hierfür ist, dass das RTF-Control selbständig auf die Tastenkombination STRG+V reagiert, aber gleichzeitig auch noch der Menübefehl ausgelöst wird, da diesem der Shortcut Strg+V zugewiesen wurde.
Um das autom. Kopieren/Einfügen im RTF-Control zu unterdrücken, gehen Sie wie folgt vor:
Private Sub RichTextBox1_KeyDown(KeyCode As Integer, Shift As Integer)
' Tasten abfragen
Select Case KeyCode
Case vbKeyC, vbKeyV, vbKeyX
' Strg+C/Strg+V/Strg+X unterdrücken
If Shift = 2 Then KeyCode = 0
Case vbKeyInsert
' Strg+Insert -> Kopieren unterdrücken
If Shift = 2 Then
KeyCode = 0
' hier ggf. direkt den eigenen Menübefehl auslösen
mnuCopy_Click
ElseIf Shift = 1 Then
' Umsch+Insert -> Einfügen unterdrücken
KeyCode = 0
' hier ggf. direkt den eigenen Menübefehl auslösen
mnuPaste_Click
End If
Case vbKeyDelete
If Shift = 1 Then
' Umsch+Delete -> Ausschneiden unterdrücken
KeyCode = 0
' hier ggf. direkt den eigenen Menübefehl auslösen
mnuCut_Click
End If
End Select
End Sub
' Kopieren (Strg+C)
Private Sub mnuCopy_Click()
With RichTextBox1
If Len(.SelText) > 0 Then Clipboard.SetText .SelText
End With
End Sub
' Einfügen (Strg+V)
Private Sub mnuPaste_Click()
If Clipboard.GetFormat(vbCFText) Then
RichTextBox1.SelRTF = Clipboard.GetText()
End If
End Sub
' Ausschneiden (Strg+X)
Private Sub mnuCut_Click()
With RichTextBox1
If Len(.SelText) > 0 Then
Clipboard.SetText .SelText
.SelText = ""
End If
End With
End Sub