PDA

Vollständige Version anzeigen : Felder mit Tab anspringen: Markierung


Winter2
09.05.2004, 18:27
In einem Formular in Access:

man kann ja mit dem Tabulator zwischen verschiedenen (Text-)feldern hi- und herspringen, wenn man das entsprechend eingerichtet hat. Dabei wird aber jeweils der Inhalt eines neu angesprungenen Textfeldes markiert (schwarz), so daß, wenn man etwas eingibt, automatisch alles überschrieben wird. Wenn man nur den Feldinhalt ändern möchte, muß man auf F2 drücken (Pos1 und Ende springen ans erste/letzte Feld, nach oben/rechts-Taste geht zum nächsten Feld).

Kann man das anders einstellenl, so daß man z.B. mit nach oben/unten zwischen den Feldern navigieren kann, und mit Pfeil rechts/links wie gewohnt innerhalb des Feldes navigieren kann, insb. ohne das der ganze Feldinhalt markiert ist?

SWR
09.05.2004, 18:33
.. in den Optionen, dann unter Tastatur, stellst Du das Cursor-Verhalten ein, sodaß er z.B. bei Eintritt in ein neues Feld nicht alles markiert,
sondern z.B. zum Anfang des Feldes geht.

Winter2
09.05.2004, 20:51
Danke, hat funktioniert - das muß also manuell im Access eingestellt werden, nicht in der Datenbank selbst.

Tott666
10.05.2004, 00:58
Hat aber den nachteil, wenn andere mit der Datenbank damit arbeiten, müssen die dies auch erst in Ihrem Access einstellen, und wenn man das nur bei deiner Datenbank haben will, muß man es nachher wieder zurückstellen.

Nimm besser im VBA-Code den Befehl SenKeys bei Fokuserhalt:

SendKeys "{F2}", True

Nouba
10.05.2004, 05:22
Schau mal in der FAQ 4.24 (http://www.donkarl.com/FAQ/FAQ4Formulare.htm#4.24) nach.

Winter2
12.05.2004, 18:49
In dem Link wird nur beschrieben, wie man das für ein einzelnes Feld macht, beispielsweise den ganzen Text selektieren, aber genau das will ja nicht.

SendKeys gilt ja auch nur für ein Steuerelement, aber ich kann das doch nicht bei jedem extra machen in der Methode "Fokuserhalt"? Gibt es keine Anweisung für die globale Einstellung? Ich weiß ja auch nicht, welches Textfeld das erste ist etc.

Nouba
12.05.2004, 19:18
In dem Link werden verschiedene Methode beschrieben, den Cursor zu positionieren. Wo ist das Problem? Vielleicht tummeln sich gar (zu) viele Textfelder auf Deinen Formularen. Du könntest statt einer Ereignisprozedur auch eine eigene Funktion im entsprechenden Ereignis eintragen. Ein Ereigniseintrag bleibt Dir aber vermutlich nicht erspart.

Arne Dieckmann
12.05.2004, 19:25
Gibt es keine Anweisung für die globale Einstellung
Ja - Du kannst mit folgendem Code die gewünschte Option (s. SWRs Vorschlag) setzen:

Application.SetOption "Behavior Entering Field", 1

Winter2
13.05.2004, 20:54
Ja, es sind sehr viele Textfelder, aber das geht nicht anders, weil das Datenmodell in der Realität, welche ich abbilde, diese eben unterscheidet (werden zeitlich und inhaltlich unabhängig voneinander eingetragen).

In jedem einzelne das einzutragen wäre unverhältnismäßig - der letzte Tipp trifft aber genau das Problem, danke! Das war genau das, was ich suchte.

Winter2
19.05.2004, 14:13
Hoppla, wenn ich das gleich beim Start der Datenbank ausführen möchte (obige Anweisung), wo muß ich dann denn den Befehl am geschicktesten reinschreiben?

Ich habe halt das Startformular genommen, Eigenschaft "Beim Laden" und den Code dahinter. Vielleicht geht das ja auch geschickter.

Was ist eigentlich der Unterschied zwischen der Eigenschaft "Beim Laden" und "Beim Öffnen"?

Arne Dieckmann
19.05.2004, 14:37
Im Code des Startformulares ist die Anweisung schon ganz gut aufgehoben. Alternativ kannst Du auch eine Public Function mit der o.a. Zeile in einem Standard-Modul anlegen. Diese Funktion rufst Du dann in einem Makro namens "AutoExec" mittels "AusführenCode" auf.

Zu dem Unterschied "Beim Laden" und "Beim Öffnen" möchte ich Dich zunächst auf die Access-Hilfe verweisen. "Beim Öffnen" ist in der Reihenfolge etwas früher dran als "Beim Laden".


Hier noch ein kleiner Ausschnitt aus der Hilfe: Wenn Sie ein Formular zum ersten Mal öffnen, treten die folgenden Ereignisse in der angegebenen Reihenfolge ein:

Open >> Load >> Resize >> Activate >> Current

Das Ereignis Close tritt nach dem Ereignis Unload ein. Letzteres wird ausgelöst, nachdem das Formular geschlossen wurde, aber bevor es vom Bildschirm entfernt wird.

Wenn Sie ein Formular schließen, treten die folgenden Ereignisse in der angegebenen Reihenfolge ein:

Unload >> Deactivate >> Close

Wenn das Ereignis Close eintritt, können Sie ein anderes Fenster öffnen oder den Namen des Benutzers anfordern, um einen Protokolleintrag vorzunehmen.

Bei der Verwendung der Ereignisse Open und Load für Makros oder Ereignisprozeduren gibt es einen wesentlichen Unterschied: die Ausführung des Ereignisses Open kann unterbunden werden, was beim Ereignis Load nicht der Fall ist. Wenn Sie z. B. in einer Ereignisprozedur für das Ereignis Open eines Formulars einen Datensatz des Formulars dynamisch erstellen, können Sie das Öffnen des Formulars unterbinden, wenn keine Datensätze vorhanden sind. Die Ausführung des Ereignisses Unload kann ebenfalls unterbunden werden, die Ausführung des Ereignisses Close jedoch nicht.