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.
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.
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