Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombinationsfeld.Dropdown

Begonnen von trebuh, Februar 29, 2016, 18:46:52

⏪ vorheriges - nächstes ⏩

trebuh

Hallo,
Brauche wieder einen Expertenrat.

Im Ereignis "GotFocus()" eines Kombifeldes (Endlosformular) habe ich den Befehl "Me!cboMeinFeld.Dropdown" gesetzt, um das Kombifeld bei Focuserhalt aufzuklappen.

Das funktioniert.
Das Problem ist jetzt nur, dass wenn das Formular geöffnet wird, und das Kombifeld im Anschluß gleich den Focus hat, es nicht aufgeklappt wird.

Habe auch schon versucht, den Befehl ins Ereignis "Beim Laden" des Formulars zu setzen. Das hilft aber nicht.
Gibt es da einen Trick?
Das besagte Kombifeld ist in Reihenfolgeposition "0". Somit müsste doch das Ereignis "Bei Fokuserhalt" ansprechen (oder Nicht?)




MzKlMu

Hallo,
meiner Meinung nach ist es eher lästig, dass das Kombi sofort aufklappt, Du willst ja die Daten eventuell nur ansehen. Besser wäre es vermutlich, nur bei einem neuen Datensatz das Kombi aufzuklappen.
Du kannst "Beim Laden" erst den Fokus setzen und dann öffnen.
ZitatPrivate Sub Form_Load()
    Me.KombinationsfeldName.SetFocus
    Me.KombinationsfeldName.Dropdown
End Sub
Gruß Klaus

trebuh

Hallo Klaus,

Du hast recht, das mit dem sofort aufklappen (wenn Daten schon vorhanden) ist lästig.
Es macht Sinn, wenn ein neuer Datensatz angelegt wird.

Jedoch funktioniert bei mir das

Private Sub Form_Load()

    If IsNull(Me!cboTest_cbo_Auswahl) Then
        'MsgBox "test"
        Me.cboTest_cbo_Auswahl.SetFocus
        Me.cboTest_cbo_Auswahl.Dropdown
    End If
   
End Sub


leider nicht.

Alles klappt ja soweit, nur wird beim laden das Kombifeld nicht aufgeklappt!?
Ich frage mich, wo der Fehler liegt?
Ist in den Formulareigenschaften was falsch eingestellt?

Habe mal eine einfache Beispieldatenbank hochgeladen. (.accdb-Datei und mdb-Datei)


MzKlMu

Hallo,
verwende das Formularereignis "Beim Anzeigen".
Private Sub Form_Current()
    If Me.NewRecord = True Then
        Me.cboTest_cbo_Auswahl.SetFocus
        Me.cboTest_cbo_Auswahl.Dropdown
    End If
End Sub

Die Prüfung auf NULL entfällt dann.
Gruß Klaus

trebuh

#4
Hallo Klaus,

habe Deinen Code ausprobiert. Leider besteht das Problem immer noch. Habe ich irgendwo eine falsche Einstellung?
Dieses Kombofeld will einfach nicht aufklappen.

Habe mal den Code mit Msg-Boxen versehen, um zu sehen wie abgearbeitet wird.

ZitatPrivate Sub Form_Current()

    MsgBox "Formular anzeigen"
      If Me.NewRecord = True Then
        MsgBox "Fokus setzen"
        Me.cboTest_cbo_Auswahl.SetFocus
        MsgBox "Combo aufklappen"
       
        Me.cboTest_cbo_Auswahl.Dropdown
        MsgBox "ENDE"
    End If
   
End Sub

Somit sehe ich ja Schritt für Schritt. Aber am Ende steht der Cursor nur im Combifeld ohne das es aufgeklappt wird. >:(

Scheinbar übersehe ich etwas, oder stehe mal wieder auf dem Schlauch. ;D

Gruß
Hubert

Nachtrag:

Habe gerade das Formular nochmal neu geladen. Es werden mir ja die MsgBox-Texte angezeigt. Interessanterweise ist der Ablauf jetzt so:

Ich öffne das Formular -> (Formular wird noch nicht angezeigt) 1. Msgbox wird angezeigt -> 2. Msgbox wird angezeigt -> 3.Msgbox wird angezeigt ->  Kombifeld wird aufgeklappt -> 4. MsgBox wird angezeigt. -> Danach erscheint das Formular und das Kombifeld ist wieder eingeklappt und der Cursor steht im Kombifeld.

Was löst das einklappen des Kombifeldes aus?

Beaker s.a.

Hallo trebuh,
ZitatSomit sehe ich ja Schritt für Schritt
Das macht normalerweise damit, dass man einen Haltepunkt setzt und den Code schrittweise mit F8 abarbeitet.
Wahrscheinlich wird das Form nach der letzten MsgBox neu "gezeichnet".
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

MaggieMay

Es kommt auch vor, dass von einer Prozedur in eine andere gesprungen wird, d.h. ein Ereignis zieht andere nach sich, das bekommst du dann mit dem MsgBox-Test gar nicht mit.

Es kommt aber auch vor, dass im Unterbrechungsmodus der Code anders läuft als ohne Unterbrechung, das hängt halt von den Ereignissen ab.
Freundliche Grüße
MaggieMay

trebuh

Hallo Ekkehard,

ZitatDas macht normalerweise damit, dass man einen Haltepunkt setzt und den Code schrittweise mit F8 abarbeitet.
Ja, das stimmt. bisher habe ich damit aber noch nicht gearbeitet. (Braucht ich bisher noch nie).
Mich wundert es aber, wieso der Code (ohne die Msg-Boxen)
Private Sub Form_Current()
    If Me.NewRecord = True Then
        Me.cboTest_cbo_Auswahl.SetFocus
        Me.cboTest_cbo_Auswahl.Dropdown
    End If
End Sub

das Kombifeld nicht aufklappt, bzw. scheinbar ist da irgendwo ein Auslöser, wo es wieder einklappt. Wüsste aber nicht wo.

Gruss
Hubert

Sehe gerade, das ein Beitrag dazwischen gekommen ist.

Hallo MaggieMay,
ZitatEs kommt auch vor, dass von einer Prozedur in eine andere gesprungen wird, d.h. ein Ereignis zieht andere nach sich, das bekommst du dann mit dem MsgBox-Test gar nicht mit.

Ich wüsste aber nicht, welches Erreignis das sein soll?
Habe ja sonst keines? Habe in meiner Beispieldatenbank alle Erreignisse gelöscht.

Xoar

Hi, hast Du schon eine Lösung hinbekommen, das Problem hab ich nämlich auch noch nie bis daro lösen können.

trebuh

Hi,

nein habe ich leider nicht. Bin aber bis jetzt auch nicht dazu gekommen.
Habe aber den Eindruck, das es evtl. an irgendwelchen Einstellungen liegt. Denn so wie ich das sehe, funktioniert der Code bei anderen ja.
Zumindest bin ich jetzt nicht mehr der einzige. Sobald ich was rausbekomme, melde ich mich.

Gruß trebuh

PS. Vielleicht hat ja noch jemand einen Tipp

trebuh

Nach weiteren Recherchen habe ich eine Lösung gefunden.

Scheinbar wird das Kombifeld aufgeklappt, bevor das Formular vollständig geladen ist. Abhilfe schafft der Timer.

Den Code
Private Sub Form_Current()

    If Me.NewRecord = True Then
        Me.cboTest_cbo_Auswahl.SetFocus
        Me.cboTest_cbo_Auswahl.Dropdown
    End If

End Sub


Nicht ins Erreignis "Beim Anzeigen" (Form_Current())

sondern in "Bei Zeitgeber" (Form_Timer()) setzen.
Private Sub Form_Timer()

     If Me.NewRecord = True Then     
        Me.cboTest_cbo_Auswahl.SetFocus
        Me.cboTest_cbo_Auswahl.Dropdown
        Me.TimerInterval = 0
    End If

End Sub


Dann mal mit den Millisekunden beim Zeitgeberintervall experimentieren.

Bei mir reichte Sage und Schreibe eine Millisekunde aus!

Gruß Hubert


Xoar

ah super, danke für den Tipp!!

Wird mit Me.TimerInterval = 0 der Timer wieder "ausgeschaltet"?
Weil sonst läuft der ja nach jeder "Zeitperiode" wieder auf.