Announcement

Collapse
No announcement yet.

Combobox und Fokus

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Combobox und Fokus

    Hallo allerseits,

    ein Kollege ist auf folgendes seltsames Verhalten der ComboBox in Delphi 7 gestoßen:

    Ein Formular enthielt bisher eine Reihe Editfelder. OnExit werden die Eingaben getestet, und der Focus dementsprechend auf das nächste Editfeld gesetzt. Jetzt kommt auf dem Formular eine ComboBox hinzu.
    Dabei ist uns aufgefallen, dass die ComboBox den Fokus erhält, wenn man in das Textfeld klickt (Focused = true), wenn man aber auf den Pfeil rechts daneben klickt, ist Focused = false, d.h. man bekommt programmtechnisch nicht mit, dass der Benutzer in die Combobox wechseln will.

    Ist das ein Bug oder ein Feature? Kann man es irgendwie hinbiegen, dass man im Programm diesen Wechsel mitbekommt?

    Vielen Dank vorab
    Karl

  • #2
    Moin
    Das Verhalten ist auch bei Delphi 5 zu beobachten; ob das ein genereller Bug ist oder sonstwas, weiß ich nicht.
    Aber man kann das elegant so lösen: jedes Element, dass einen Focus hat, ist somit ein aktives Control, und das kann man programmtechnisch abfragen:

    if ActiveControl = ComboBox then...

    D.h.: sobald ein Control wie Edit, Combobox etc, entweder expliziet fouciert wird (mit xxx.SetFocus) oder mittels TabStop(sofern gesetzt) den Focus erhält, wird es zum aktiven Element.

    Gruß
    Raine

    Comment


    • #3
      Moin
      Das Verhalten ist auch bei Delphi 5 zu beobachten; ob das ein genereller Bug ist oder sonstwas, weiß ich nicht.
      Aber man kann das elegant so lösen: jedes Element, das einen Focus hat, ist somit ein aktives Control, und das kann man programmtechnisch abfragen:

      if ActiveControl = ComboBox then...

      D.h.: sobald ein Control wie Edit, Combobox etc, entweder expliziet fouciert wird (mit xxx.SetFocus) oder mittels TabStop(sofern gesetzt) den Focus erhält, wird es zum aktiven Element.

      Gruß
      Raine

      Comment


      • #4
        Moin moin,

        leider ist es nicht ganz so einfach: Im OnExit-Ereignis fragen wir mit controlname.Focused ab, ob bestimmte Felder ausgewählt wurden oder überprüfen die Eingabe. Wenn also ein Eingabefeld den Fokus besitzt und der Benutzer klickt auf die ComboBox, dann wird z.B. intern erst geprüft, ob die Eingabe korrekt war bzw. was das nächste logische Eingabefeld ist (Der Benutzer wird ziemlich stark geführt). Bei der Abfrage

        if ComboBox.Focused then ...

        bekommt man aber nicht mit, ob auf den Pfeil geklickt wurde, d.h. der Fokus wird vom Programm auf das nächste sinnvolle Eingabefeld gesetzt. Wenn der Benutzer dann nochmals auf die Combobox klickt (dann erst erhält die Box den Fokus) dann gibt es im OnExit des neuen Feldes evtl. Probleme, da hier noch keine Eingabe stattgefunden hat und OnExit hier den Fokus nicht auf ein anderes Feld wechseln lässt.

        Also alles nicht so ganz ohne... :/

        Viele Grüße und ein schönes Wochenende
        Kar

        Comment


        • #5
          Moin :-)

          Hm, in der Tat ist die Combobox etwas 'eigenwillig', was den Focus anbelangt...
          Eins verstehe ich nicht ganz: wenn für jedes Control das entsprechende OnExit-Ereignis ausgeführt wird, dann macht m.E. die Abfrage auf Controlname.Focused keinen Sinn, denn ein aktives Control hat ja schon den Focus, wenn es verlassen wird...
          Bei der Combobox kann man ja auch entsprechende Validierungen vornehmen, um den Sinn der Auswahl mit den anderen Eingabefeldern zu überprüfen...

          Gruß Raine

          Comment

          Working...
          X