PDA

Vollständige Version anzeigen : Listenfeld aktivieren


IT-Fuzzi
06.05.2004, 22:07
Hallo,
hab eine etwas ungewöhnliche Frage:
Kann man denn ein Listenfeld welches den Focus bekommt auch gleich aktivieren?
Also ich meine das so:
Wenn ich z.B. ein Listenfeld habe, welches mir Artikel anzeigt und ich aus dem Feld Menge mit Enter weiterspringe, komme ich in`s Listenfeld, aber dort muss ich dann entweder mit Mausklick oder mit Pfeiltaste den ersten DS aktivieren (also dass er markiert ist)

Gibt`s da keine Möglichkeit, daß wenn ich mit Enter in das Feld springe sofort der erste DS aktiv ist?

Noch besser wäre ein Funktion, die mir beim ersten "reinspringen den ersten DS markiert, dann wenn ich zum 2. Mal reinspringe den 2. usw

Hat jemand sowas schonmal gemacht oder weiß wie`s geht?

J_Eilers
06.05.2004, 22:10
Hi,

als Ereignis Fokuserhalt:

Me!Listenfeld.Column(1,1)

Dynamisch kann man es auch machen, dann muss man nur eine Variable im Klassenmodul als Public deklarieren, mit 1 beginnen und die an die 2. Column Stelle (1,x) setzen und bei Fokuserhalt hochzählen.

IT-Fuzzi
06.05.2004, 22:13
Oh-Oh,
davon hab ich nur die Hälfte kapiert :confused:
Also ich soll zunächst beim Ereignis GET FOCUS des Listenfeldes den genannten Code einsetzen, aber wie genau muss das mit der Dynamischen Variante aussehen?
Kannst Du mir das genauer erläutern?

Ach ja, habs grad probiert, aber da fehlt noch was im Code. Er bringt mir sofort nen Kompilierungsfehler

J_Eilers
07.05.2004, 07:13
Sorry, war schon etwas spät gestern.
Deklariere im Klassenmodul eine Variable:

Public x As Long

Und dann bei Fokuserhalt:

x = x + 1
If x <= Me!Liste0.ListCount Then
Me!Liste0.Selected(x - 1) = True
End If

IT-Fuzzi
07.05.2004, 12:39
Hallo,
vielen Dank für die Hilfe.
Es funktioniert - nur hab ich noch eine Frage dazu:
Ich verwende diese Funktion für mein Lieferscheinformular.
Wenn ich nun erst einen Kunden in einem Listenfeld anklicke, springt der Cursor ins "Lieferschein_Details" UForm wo zunächst das Steuerelement "MENGE" den Fokus bekommt.
Ich gebe die Menge ein und klicke auf ENTER, jetzt bekommt das Listenfeld mit den Artikeln (und unserer Funktion) den Fokus.
Mach ich das zum 1. Mal funktioniert es leider noch nicht. Gleicher Effekt wie immer: Listenfeld bekommt Fokus der erste DS ist aber noch nicht markiert. Erst wenn ich den einmal markiere (z.B. mit Pfeil AB Taste) kommt die Funktion zum tragen. Beim 2. einspringen wird der 2 , dann der 3. DS markiert usw.
So - wie bekomme ich das hin, dass auch gleich beim ersten Mal der 1. DS markiert wird?

Wär toll wenn Du mir da nochmal helfen könntes, denn ich halte so eine Funktion für äußerst hilfreich für die Bedienfreundlichkeit des Formulars (man muss eben nich dauernd die Maus in die Hand nehmen)


Mein (äh..Dein) bisheriger Code:



Private Sub Liste44_GotFocus()

x = x + 1
If x <= Me!Liste44.ListCount Then
Me!Liste44.Selected(x - 1) = True
End If


End Sub

IT-Fuzzi
07.05.2004, 12:53
Ich hab mal mit dem Code experimentiert und folgende Änderung vorgenommen:

x = x + 1
If x <= Me!Liste44.ListCount Then
Me!Liste44.Selected(x - 0 ) = True


Jetzt funktioniert es eigentlich genau wie ich will, nur leider nur beim ersten Kunden.
Sobald ich im Hauptformular auf drucken gehe (also Lieferschein ausdrucken) und ein neuer DS beginnt mit meinem neuen Kunden geht es nicht mehr.
Kann ich denn x nicht mit einem neuen Datensatz im HF "zurückstellen"?

J_Eilers
07.05.2004, 13:23
Dann hast du wahrscheinlich in der 1. Zeile des Listenfeldes die Bezeichnung stehen. Dann kannst du das -1 weglassen.

Du kannst beim Anzeigen-Ereignis (Form_Current) den x-Wert zurücksetzen. (x= 0). Damit sollte es dann funktionieren.

IT-Fuzzi
07.05.2004, 13:48
Hi Jan,
also ich hab die Funktion als Modul gesetzt (so kann ich Sie auch für andere ähnliche Formulare verwenden)
Den Wert X kann ich allerdings erst beim Ereignis "Klicken" des Kundenfeldes zurücksetzen.

Jedenfalls funktioniert es jetzt Dank Deiner Hilfe ! :biggrinl: