Markierung automatisch kopieren

Manchmal möchten Sie vielleicht schnell den kompletten Inhalt oder auch Ausschnitte von einem Textfeld in ein anderes übernehmen. Dann markieren Sie diesen, kopieren ihn, beispielsweise mit der Tastenkombinatino Strg + C, und fügen ihn mit Strg + V in das Zieltextfeld ein. Das ist für den Alltag schnell genug, so Sie denn die Tastenkombinationen aus dem Stegreif beherrschen (das ist längst nicht immer der Fall!). Wenn Sie jedoch häufiger Inhalte von Textfeld A nach Textfeld B übertragen wollen, gibt es einen viel eleganteren Weg. Schauen Sie selbst!

Mit dem Beispiel des vorliegenden Beitrags wollen wir zeigen, wie einfach es ist, den in einem ersten Textfeld markierten Text in ein zweites Textfeld zu kopieren. Dabei soll es zwei auslösende Ereignisse geben. Das erste und einfachere ist die Markierung mit der Maus. Diese beginnt, indem der Benutzer den Start der Markierung durch Herunterdrücken der Maustaste an der entsprechenden Stelle selektiert. Dann bewegt er den Mauszeiger bei gedrückter Maustaste zu der Stelle, die das Ende der Markierung festlegt. Um den Inhalt in das andere Textfeld zu kopieren, muss der Benutzer nun nur noch die Maustaste loslassen. Natürlich gelingt dies auch andersherum: Man kann auch zuerst das Ende der Markierung auswählen und dann weiter vorn an der Startposition die Maustaste loslassen.

Die zweite Variante soll die Markierung mit der Tastatur ermöglichen. Hier positionert der Benutzer die Einfügemarke vor die erste Position des zu markierenden Textes – sei es mit der Maus oder mit den Cursortasten.

Dann erweitert er die Markierung durch Bewegung der Cursortasten bei gedrückter Umschalttaste (für zeichenweisen Vorschub) oder bei zusätzlich gedrückter Strg-Taste (um gleich ganze Wörter zur Auswahl hinzuzufügen). Wenn die gewünschte Auswahl erreicht wurde, lässt er einfach die Umschalttaste los und der markierte Text wird kopiert.

Dies sieht beispielsweise wie in Bild 1 aus. Hier haben wir zunächst den vierten Abschnitt des Quelltextes markiert und so zum Zielfeld hinzugefügt. Dann haben wir den dritten Absatz markiert. Dadurch, dass die Option Neue Zeile ausgewählt ist, landet der markierte Text in der nächsten Zeile hinter dem bereits im Zielfeld vorhandenen Text.

Kopieren von einem Textfeld zum nächsten

Bild 1: Kopieren von einem Textfeld zum nächsten

Aufbau des Formulars

Der Versuchsaufbau sieht in der Entwurfsansicht wie in Bild 2 aus. Das Formular enthält hauptsächlich zwei Textfelder namens txtQuelle und txtZiel, von denen das Textfeld txtQuelle beim Laden Text anzeigen soll, der durch verschiedene Aktionen in das zweite Textfeld txtZiel kopiert werden soll.

Entwurf des Formulars zum Kopieren von Inhalten per einfacher Markierung

Bild 2: Entwurf des Formulars zum Kopieren von Inhalten per einfacher Markierung

Um genauer festzulegen, wie der Text an den bereits in txtZiel enthaltenen Text angefügt werden soll, gibt es noch eine Optionsgruppe namens ogrModus. Diese bietet zwei mögliche Werte an: Hinten anfügen oder Neue Zeile.

Damit unser Beispielformular beim öffnen einige Beispielsätze anzeigt, füllen wir dieses in der Ereignisprozedur, die durch das Ereignis Beim Laden des Formulars ausgelöst wird, mit etwas Platzhaltertext.

Dann setzen wir den Fokus auf das Textfeld txtQuelle und heben eine eventuell durch die Einstellung für den Eintritt in das Textfeld vorgesehene Markierung auf, indem wir die Eigenschaft SelLength auf den Wert 0 einstellen:

Private Sub Form_Load()
     Dim strTemp As String
     strTemp = "Et et aut ..." & vbCrLf & vbCrLf 
     strTemp = strTemp & "Diate inus ..." & vbCrLf & vbCrLf
     strTemp = strTemp & "Erehent, c..." & vbCrLf & vbCrLf
     strTemp = strTemp & "Ro etur aut..." & vbCrLf & vbCrLf
     strTemp = strTemp & "consed maio..."
     Me!txtQuelle = strTemp
     Me!txtQuelle.SetFocus
     Me!txtQuelle.SelLength = 0
End Sub

Kopieren per Tastatur

Das Kopieren nach der Markierung eines Bereichs unter Zuhilfenahme der Umschalttaste (zur Markierung einzelner Buchstaben) beziehungsweise der Umschalttaste plus der Strg-Taste (zur Markierung kompletter Wörter) erfolgt nach dem Loslassen der zuvor betätigten Tasten.

Dies löst das Ereignis Bei Taste auf des Textfeldes txtQuelle aus (s. Listing 1).

Private Sub txtQuelle_KeyUp(KeyCode As Integer, Shift As Integer)
     Dim strTemp As String
     If (Shift = acShiftMask Or Shift = acShiftMask And acCtrlMask) And KeyCode = vbKeyShift And Me!txtQuelle.SelLength _
             > 0 Then
         strTemp = Mid(Me!txtQuelle, Me!txtQuelle.SelStart + 1, Me!txtQuelle.SelLength)
         If Not Len(Me!txtZiel) = 0 Then
             If Me!ogrModus = 1 Then
                 Me!txtZiel = Me!txtZiel & " "
             Else
                 Me!txtZiel = Me!txtZiel & vbCrLf
             End If
         End If
         Me!txtZiel = Me!txtZiel & strTemp
     End If
End Sub

Listing 1: Diese Ereignisprozedur kopiert beim Loslassen der Umschalt/Strg-Taste den markierten Inhalt in ein weiteres Textfeld.

Die Prozedur prüft zunächst, ob soeben die Kombination aus Umschalttaste oder Umschalt plus Strg-Taste (ermittelt aus dem Parameter Shift, acShiftMask entspricht Umschalttaste, acShiftMask + acCtrlMask entspricht Umschalttaste und Strg-Taste) und der Umschalttaste (ermittelt aus dem Parameter Key mit dem Wert vbKeyShift) losgelassen wurde. Außerdem sollte die Länge der aktuellen Markierung (ermittelt mit der Eigenschaft SelLength des Steuerelements txtQuelle) größer als 0 sein, da sonst offensichtlich keine Markierung vorliegt.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar