Seite 1 von 1

XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 17:50
von georg
Hallo,


mir geht es diesmal um die Bedienung einer XbpComboBox, nicht um die Konfiguration o.ä.

Unterstellen wir, die XbpComboBox hat die Einträge

- drei
- eins
- zwei

(streng alphabetisch). Wenn ich nun im SLE-Teil "zw" eintippe, wird in der Listbox auf den dritten Eintrag positioniert. Wenn ich den auswählen will, muss ich die Maus verwenden - per Tastatur geht es nicht. Wenn ich z.B. Cursor-unten drücke, wechselt der Focus in der Listbox auf den ersten Eintrag.

Kennt einer von Euch einen Weg, mittels Tastatur in die Listbox zu wechseln, um dort den entsprechenden Eintrag auszuwählen?

Es geht hier um die Erfassung vieler Daten, und jedesmal die Hand von der Tastatur zu nehmen, um mit der Maus zu klicken (oder den Suchbegriff komplett einzutippen) kostet zu viel Zeit, darum suche ich nach einer reinen Tastaturlösung.

Re: XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 19:23
von AUGE_OHR
hi Georg,

wenn die ComboBox "Focus" hat : F4

Re: XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 20:35
von georg
Hallo, Jimmy -


es geht mir darum, dass das XbpSLE-Element den Fokus hat. Wenn das der Fall ist, löscht F4 das Eingabefeld.

Re: XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 20:53
von Jan
Hallo Georg,

wenn ich das richtig in Erinnerung habe kannst Du nach Eingabe des (Anfangs des) Suchbgriffes im SLE-Bereich der ComboBox mit den Cursor-Tasten in dem Listbox-Bereich der Combobox wandern. Und dann auch mit Enter auswählen. Als ob die Pfeiltaste automatisch den Fokus darauf legt.

Jan

Re: XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 21:01
von georg
Hallo, Jan -


da ich mit einer abgeleiteten Klasse arbeite, kann sich da ja was verstecken. Also habe ich mal den Code aus der Dokumentation kopiert und eine XBPCOMBOBOX_SIMPLE draus gemacht: oben ein SLE, unten eine ListBox.

Wenn in im SLE etwas eingebe, und dann Cursor-unten drücke, geht der Focus auf die ListBox, aber es wird das erste Element der Liste angesprungen, und meine Eingabe ist weg, sie wird mit dem Wert des ersten Eintrags in der Liste überschrieben.

Ich habe in der Zwischenzeit auch mit dem :keyboard-Callback experimentiert, aber wenn das Event kommt, ist der Focus bereits auf dem ListBox-Teil, und das erste Element in der Liste ausgewählt.

(Gleiches Verhalten wie bei meiner Klasse.)

Re: XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 21:09
von HaPe
Ich weiß jetzt nicht wie bei Xbase++ die ComboBox technisch realisiert ist.
Aber in vielen Windows-Programmen öffnet in einer ComboBox die F4-Taste die Liste.
Zb. in Word, Excel, NotePad++ und auch in der Xbase++-WB.
Und überall ist es so, dass bei einer Vorauswahl im SLE-Control/TextBox nach dem Betätigen von F4 auf die Vorauswahl fokussiert wird.
Ich frage mich deshalb, warum bei dir F4 den Inhalt löscht und nicht die Liste der ComboBox öffnet :shock:

Re: XbpComboBox Bedienung

Verfasst: Do, 07. Apr 2022 21:41
von georg
Hallo, Hans-Peter -


ich verwende die XbpComboBox so, dass die Liste bereits geöffnet ist. Das könnte der Grund sein, warum F4 nicht den gewünschten Effekt hat.

Re: XbpComboBox Bedienung

Verfasst: Fr, 08. Apr 2022 8:13
von HaPe
Guten Morgen Georg !
ich verwende die XbpComboBox so, dass die Liste bereits geöffnet ist. Das könnte der Grund sein, warum F4 nicht den gewünschten Effekt hat.
Bei allen Beispielen bzw. Tests, wird beim erneuten Betätigen von F4 die Liste der ComboBox wieder geschlossen.
Das heißt, mit F4 auf und mit dem nächsten F4 wieder zu.

Ich kann mir nicht vorstellen, dass Alaska das Verhalten anders als alle Anderen umsetzt.

Re: XbpComboBox Bedienung

Verfasst: Fr, 08. Apr 2022 9:44
von georg
Hallo, Hans-Peter -


also, ich denke, dass Alaska die XbpComboBox so darstellt, wie es unter Windows geht.

Allerdings gibt es da die Instanzvariable :type, die über das Aussehen entscheidet. Aus technischen Gründen habe ich die XBPCOMBOBOX_SIMPLE Variante gewählt, bei der die XbpComboBox ausgeklappt angezeigt wird und auch nicht eingeklappt werden kann.

Auf diese Variante beziehe ich mich, und dafür suche ich (falls es existiert) eine Lösung zur Tastaturbedienung. Und zwar, um zu dem korrespondierenden Eintrag in der Listbox zu springen.

Ich hänge gleich mal das Beispiel aus der Dokumentation an, dann kannst Du das ja mal überprüfen. Wobei, wie schon geschrieben, ich es so angepasst habe, dass eine SIMPLE Combobox verwendet wird.

Re: XbpComboBox Bedienung

Verfasst: Fr, 08. Apr 2022 17:26
von georg
Guten Abend,


also ich habe jetzt eine programmtechnische Lösung gefunden, wenn sie aus meiner Sicht auch nicht so elegant ist, wie ich mir das wünsche:

Code: Alles auswählen

// Definition der XbpComboBox:
   oXbp:keyboard := {|nKey, uNIL, self| CheckKeyEntry(nKey, self)}


STATIC FUNCTION CheckKeyEntry(nKey, oList)
   Local cToken
   Local nLen, nI

   Static cOldValue

   IF nKey <> xbeK_DOWN
      cOldValue := Trim(oList:XbpSLE:editBuffer())
      RETU(oList)
   ENDIF

   oList:XbpSLE:setData(cOldValue)

   nLen := oList:numItems()
   FOR nI := 1 TO nLen
      cToken := oList:getItem(nI)
      IF cToken = cOldValue    // auch ein Teiltreffer trifft
         oList:setData(nI)
         RETU(oList)
      ENDIF
   NEXT
RETURN (oList)
Da beim Drücken von Cursor-runter der :editbuffer() geleert wird, speichere ich bei jedem Durchlauf den aktuellen Inhalt, um darauf zurück zu greifen, wenn die entsprechende Taste erkannt wird.

Theoretisch könnte ich die Items der XbpComboBox auch etwas optimierter durchsuchen (sie sind alphabetisch sortiert), aber das geht von der Geschwindigkeit aktuell.

Ärgerlich ist halt eben, dass das Eingabefeld Daten enthält, leer ist, und dann wieder die gleichen Daten enthält, aber es erfüllt seinen Zweck.

Trotzdem frage ich mich, ob es dafür nicht doch eine Tastenkombination gibt?