Home > Artikel > Ausgabe 6/2013 > Textfelder im Griff, Teil II: Markierungen

Textfelder im Griff, Teil II: Markierungen

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Textfelder sind eines der wichtigsten Steuerelemente zur Eingabe von Daten. Dementsprechend sollten Sie maximalen Komfort beim Umgang mit Textfeldern gewährleisten. Wie das aussieht? Zum Beispiel so, dass der Benutzer so wenig Arbeit wie möglich hat – etwa durch das richtige Positionieren der Einfügemarke beziehungsweise Markierung. Dieser Artikel zeigt, welche Möglichkeiten die Markierung grundsätzlich bietet und wie Sie diese per VBA und mit anderen Einstellungen anpassen können.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1306_TextfelderMarkieren.mdb.

Textfelder markieren

Sie werden es bereits festgestellt haben: Beim Verschieben des Fokus auf ein Textfeld kann es zu verschiedenen Aktionen kommen. Entweder Access markiert den kompletten Inhalt vom ersten bis zu letzten Zeichen oder platziert die Einfügemarke ganz vorn oder ganz hinten im Textfeld. Ist das Textfeld leer, landet die Einfügemarke natürlich immer an der gleichen Stelle.

Wussten Sie, dass Sie dieses Verhalten beeinflussen können? Es gelingt ganz einfach: Sie brauchen nur eine Einstellung in den Access-Optionen vorzunehmen. Diese finden Sie etwa unter Access 2010, wenn Sie den Befehl Optionen im Datei-Menü auswählen und dann im Optionen-Dialog zum Bereich Clienteinstellungen wechseln.

Dort finden Sie die Option Cursorverhalten bei Eintritt in Feld mit den folgenden Einstellungen (siehe Bild 2):

Beim Wechsel in ein Textfeld markiert Access den kompletten Inhalt.

Bild 1: Beim Wechsel in ein Textfeld markiert Access den kompletten Inhalt.

  • Ganzes Feld markieren
  • Zum Anfang des Feldes gehen
  • Zum Ende des Feldes gehen

Beim Wechsel zum Textfeld aus Bild 1 war beispielsweise die Option Ganzes Feld markieren eingestellt.

Einstellungen für das Verhalten beim Eintritt in ein Feld

Bild 2: Einstellungen für das Verhalten beim Eintritt in ein Feld

Damit kommen wir nun gleich zu einem wichtigen Punkt: Die Einstellung, die Sie in den Access-Optionen vornehmen, gilt für die aktuelle Sitzung und für alle von nun an begonnenen Sitzungen. Access erweckt zwar den Eindruck, dass man die Anwendung neu starten müsste, damit die Änderung wirkt, aber dies ist nicht der Fall – wenn Sie etwa wünschen, dass die Einfügemarke beim Eintreten in ein Feld gleich am Ende des Inhalts landet, dann geschieht dies nach dem Einstellen der Option auf den Wert Zum Ende des Feldes gehen auch. Sollten Sie jedoch parallel weitere Access-Instanzen geöffnet haben, wirkt sich die Änderung der Option nicht darauf aus.

Eintrittsverhalten per VBA

Sie können diese Eigenschaft auch per VBA einstellen. Um dies zu veranschaulichen, haben wir die notwendigen Codezeilen im Formular frmTextfeldmarkierungen untergebracht. Die Optionsgruppe ogrCursorverhalten aus Bild 3 hat drei Optionen mit den Werten 0, 1 und 2.

Einstellen des Cursorverhaltens per Formular/VBA

Bild 3: Einstellen des Cursorverhaltens per Formular/VBA

Die meisten Optionen von Access können Sie mit dem VBA-Befehl Get­Option einlesen und mit SetOption schreiben – so auch in diesem Fall. Dies nutzen wir zunächst beim Öffnen des Formulars, um den Wert der Optionsgruppe entsprechend einzustellen. Dies erledigt die Ereignisprozedur, die durch das Ereignis Beim Laden ausgelöst wird (Eigenschaft auf [Ereignisprozedur] einstellen, dann auf die Schaltfläche mit den drei Punkten klicken und die im VBA-Editor erscheinende Prozedur ergänzen) – siehe Listing 1.

Private Sub Form_Load()

     Me!ogrCursorverhalten = GetOption("Behavior Entering Field")

End Sub

Listing 1: Cursorverhalten abfragen und darstellen

Wenn Sie die Option nun ändern, soll diese gleich in die entsprechende Access-Option übertragen werden. Dazu benötigen wir eine weitere Prozedur, die diesmal durch das Ereignis Nach Aktualisierung der Optionsgruppe ogrCursorverhalten ausgelöst wird (siehe Listing 2).

Private Sub ogrCursorverhalten_AfterUpdate()

     SetOption "Behavior Entering Field", Me!ogrCursorverhalten

End Sub

Listing 2: Cursorverhalten per VBA einstellen

Beim Einstellen der Option bleibt immerhin der Hinweis von Access aus, dass die Anwendung erst neu gestartet werden muss, damit die Option wirksam wird.

Nicht optimal

Ein Problem bleibt jedoch bestehen: Die Änderung bezieht sich jeweils auf den aktuellen Rechner, und sie wirkt sich auch auf alle im Anschluss geöffneten Access-Anwendungen aus. Am besten wäre es daher, man würde gleich zu Beginn prüfen, welchen Wert die Option aktuell besitzt, den eigenen, gewünschten Wert per VBA einstellen und diesen anschließend auf den vorgefundenen Wert zurücksetzen.

Das hört sich wirklich kompliziert an und ist in vielen Fällen auch gar nicht nötig. Otto Normalverbraucher ist in der Regel mit den Standardeinstellungen zufrieden, und für Sonderfälle gibt es wesentlich elegantere Lösungen. Und damit können Sie das Verhalten der Einfügemarke in Textfeldern sogar noch viel genauer steuern!

Handbetrieb

Falls Sie es noch nicht wussten: Es gibt natürlich auch für den Benutzer genügend Möglichkeiten, die Markierung beziehungsweise die Position der Einfügemarke anzupassen:

  • Ein Doppelklick in den Text markiert das aktuelle Wort komplett.
  • Ein einfacher Klick auf das komplett markierte Textfeld hebt die Markierung auf und positioniert die Einfügemarke an der angeklickten Stelle.
  • F2 hebt die aktuelle Markierung auf und platziert die Einfügemarke am Ende des Textes oder markiert den kompletten Text, sofern dieser aktuell nicht komplett markiert ist.
  • Bei gedrückter Umschalttaste und den Tasten Nach links und Nach rechts erweitern Sie die aktuelle Markierung entsprechend.
  • Bei gleichzeitig gedrückter Strg-Taste wird die Markierung jeweils um ein Wort erweitert (also bis zum nächsten Leerzeichen beziehungsweise bis zum Ende des Textes).

Lokale Einstellung

In der Tat können Sie das Verhalten für jedes einzelne Textfeld detailliert festlegen. Auch hier ist natürlich der Einsatz von VBA vonnöten – aber eine Access-Anwendung lässt sich nun einmal nicht nur mit Assistenten und ein paar Mausklicks zusammenstellen.

Eigenschaften für die Markierung

Zum Definieren der Markierung in einem Textfeld hat Microsoft uns die Eigenschaften SelLength, SelStart und SelText markiert. Diese haben die folgende Bedeutung:

  • SelStart: Legt die Position des Beginns der Markierung fest.
  • SelLength: Legt die Anzahl der markierten Zeichen fest.
  • SelText: Gibt den markierten Text zurück.

Um die Werte dieser Felder zu beobachten, fügen Sie dem Beispielformular vier Textfelder mit den folgenden Namen hinzu (siehe Bild 4):

Ausgabe verschiedener Textfeld-Eigenschaften

Bild 4: Ausgabe verschiedener Textfeld-Eigenschaften

  • txtBeispiel
  • txtSelStart
  • txtSelLength
  • txtSelText

Das erste Feld soll Beispieltexte aufnehmen und verschiedene Markierungen erlauben. Die übrigen Felder sollen die jeweiligen Werte der Eigenschaften SelStart, SelLength und SelText ausgeben. Fehlt nur noch ein Mechanismus, der bei Änderungen des Textes beziehungsweise der Markierung im Textfeld txtBeispiel die Inhalte der Felder zur Darstellung der Eigenschaftswerte aktualisiert.

Dies sollte nicht nur nach der Betätigung der Tastatur, sondern auch nach dem Platzieren der Einfügemarke oder dem Markieren von Textabschnitten mit der Maus geschehen.

Dazu bieten sich zwei Ereignisse an: Bei Maustaste auf und Bei Taste auf des Textfeldes txtBeispiel. Für das Ereignis Bei Taste auf legen Sie die Ereignisprozedur aus Listing 3 an.

Private Sub txtBeispiel_KeyUp(KeyCode As Integer, Shift As Integer)

     Me!txtSelStart = Me!txtBeispiel.SelStart

     Me!txtSelLength = Me!txtBeispiel.SelLength

     Me!txtSelText = Me!txtBeispiel.SelText

End Sub

Listing 3: Textfeldeigenschaften nach Tastaturbetätigung abfragen

Die Prozedur liest schlicht die Eigenschaftswerte der drei Eigenschaften SelStart, SelLength und SelText ein und schreibt sie in die drei dafür vorgesehehen Textfelder. Für die Prozedur, die durch das Ereignis Bei Mauszeiger auf ausgelöst wird, legen Sie übrigens genau die gleichen Befehle an.

Nun sind Sie an der Reihe: Schreiben Sie einen Text in das Textfeld, bewegen Sie die Einfügemarke mit den Cursortasten nach links oder rechts oder markieren Sie mit den Cursortasten oder der Maus Bereiche des Textes. Die drei Textfelder liefern akkurat die aktuellen Werte der entsprechenden Eigenschaften.

Dabei lernen wir beispielsweise, dass SelStart den Wert 0 liefert, wenn sich die Einfügemarke an der ganz linken Position befindet oder dass die Länge des Textes bei fehlender Markierung ebenfalls 0 ist.

Markierungen einstellen

Die drei Eigenschaften SelStart, SelLength und SelText können Sie übrigens auch selbst einstellen. Und das ist gar nicht einmal unpraktisch, wie die folgenden Beispiele zeigen werden.

Um dies zu demonstrieren, haben wir zunächst drei Textfelder mit den Namen txtCursorLinks, txtCursorRechts und txtAllesMarkieren angelegt (siehe Bild 5). Das erste Feld soll nun beim Fokuserhalt die Einfügemarke ganz links anzeigen, das zweite ganz rechts und das dritte soll den kompletten enthaltenen Text markieren. Damit diese Textfelder überhaupt einen Text enthalten, haben wir der Ereignisprozedur Form_Load noch einige Zeilen hinzugefügt:

Einstellen der Eigenschaften SelStart, SelLength und SelText

Bild 5: Einstellen der Eigenschaften SelStart, SelLength und SelText

Private Sub Form_Load()

     Me!txtCursorLinks = _

         "Cursor links vom Inhalt."

     Me!txtCursorRechts = _

         "Cursor rechts vom Inhalt."

     Me!txtAllesMarkieren = _

         "Alles markiert."

     ...

End Sub

Damit diese Textfelder nun die Einfügemarke an der gewünschten Stelle platzieren beziehungsweise den kompletten enthaltenen Text markieren, benötigen wir jeweils eine Ereignisprozedur, die beim Anklicken oder tastaturgesteuerten Aktivieren des Textfeldes ausgelöst wird. Dafür gibt es zwei Kandidaten: Bei Fokuserhalt und Beim Hingehen. Um die richtige Eigenschaft auszuwählen, müssen Sie deren Unterschied kennenlernen.

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!