Combobox und Autovervollständigen
Moderator: Moderatoren
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Combobox und Autovervollständigen
Hat jemand von Euch schon mal soetwas gemacht? Ich möchte gerne, daß man im SLE etwas eingibt, und die Listbox automatisch auf den ersten Wert mit diesem Beginn springt und im SLE anzeigt. Und beim Verlassen auch als gewählten Wert übernimmt.
Die Combobox ist XBPCOMBO_DROPDOWN
Jan
Die Combobox ist XBPCOMBO_DROPDOWN
Jan
- Rolf Ramacher
- Der Entwickler von "Deep Thought"
- Beiträge: 1930
- Registriert: Do, 09. Nov 2006 10:33
- Wohnort: Bergheim
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Hallo Jan,
nicht mit einer Listbox aber mit einem Browse.
Hier mein Code Beispiel Auszug. . funkt. tadellos.
oSleSuche := xbpSle():new(drawingArea,,{280, 320},{80,20},,.F.)
oSleSuche:keyboard := {|nKey,mp2,obj| browseSearch(obj, oBrowse, cArtnr)}
oSleSuche:create()
oSleSuche:Show()
FUNCTION browseSearch(oSle, oBrowse, cIndex)
LOCAL cValue := oSle:editBuffer()
Set Softseek on
Dbseek(cValue, .T., cIndex)
oBrowse:refreshAll()
Set Softseek Off
RETURN(.T.)
nicht mit einer Listbox aber mit einem Browse.
Hier mein Code Beispiel Auszug. . funkt. tadellos.
oSleSuche := xbpSle():new(drawingArea,,{280, 320},{80,20},,.F.)
oSleSuche:keyboard := {|nKey,mp2,obj| browseSearch(obj, oBrowse, cArtnr)}
oSleSuche:create()
oSleSuche:Show()
FUNCTION browseSearch(oSle, oBrowse, cIndex)
LOCAL cValue := oSle:editBuffer()
Set Softseek on
Dbseek(cValue, .T., cIndex)
oBrowse:refreshAll()
Set Softseek Off
RETURN(.T.)
-
- Rekursionen-Architekt
- Beiträge: 315
- Registriert: Mo, 16. Okt 2006 13:04
- Wohnort: Region Stuttgart
Hallo Jan,
wenn die Listbox-Werte in einem Array stehen, könnte das so gehen (aus dem Kopf, nur in Stichworten)
oCombobox:XbpSLE:keyboard verwenden
nach jedem Tastendruck :XbpSLE:editBuffer() abfragen
mit diesem Wert ascan() im Array der Listbox-Daten
wenn gefunden,
oCombobox:XbpListbox aufklappen sowie
oCombobox:XbpListbox:setTopItem( <Arrayposition> ) sowie oCombobox:XbpSLE:setData( <Arrayelement > ) sowie
oCombobox:XbpSLE:setMarked() vom ersten automatisch hinzugefügten Zeichen bis zum Ende des Editbuffers
Hoffe ich habe nichts übersehen.
Viele Grüße
Günter
wenn die Listbox-Werte in einem Array stehen, könnte das so gehen (aus dem Kopf, nur in Stichworten)
oCombobox:XbpSLE:keyboard verwenden
nach jedem Tastendruck :XbpSLE:editBuffer() abfragen
mit diesem Wert ascan() im Array der Listbox-Daten
wenn gefunden,
oCombobox:XbpListbox aufklappen sowie
oCombobox:XbpListbox:setTopItem( <Arrayposition> ) sowie oCombobox:XbpSLE:setData( <Arrayelement > ) sowie
oCombobox:XbpSLE:setMarked() vom ersten automatisch hinzugefügten Zeichen bis zum Ende des Editbuffers
Hoffe ich habe nichts übersehen.
Viele Grüße
Günter
- Jan
- Marvin
- Beiträge: 14658
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
@ Rolf: Das habe ich bei Browses auch schon mehrfach gemacht.
@Günter: Ja, das funktioniert. Es gibt dabei allerdings 2 Probleme: Aus irgendeinem Grund wird bei mehr als 1 eingegebenen Buchstaben ein Leerzeichen angehängt. Also muß ich das mit Alltrim(...:editBuffer) auswerten. Den anderen Punkt habe ich noch nicht geknackt. Das Teil ist Großbuchstaben-Sensitiv. Und ich muß gestehen daß ich nicht weiß, wie ich über AScan ein Upper einbaue. Oder das ganze eben nicht Großbuchstaben-Sensitiv zu haben.
Jan
@Günter: Ja, das funktioniert. Es gibt dabei allerdings 2 Probleme: Aus irgendeinem Grund wird bei mehr als 1 eingegebenen Buchstaben ein Leerzeichen angehängt. Also muß ich das mit Alltrim(...:editBuffer) auswerten. Den anderen Punkt habe ich noch nicht geknackt. Das Teil ist Großbuchstaben-Sensitiv. Und ich muß gestehen daß ich nicht weiß, wie ich über AScan ein Upper einbaue. Oder das ganze eben nicht Großbuchstaben-Sensitiv zu haben.
Jan
- brandelh
- Foren-Moderator
- Beiträge: 15697
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 66 Mal
- Danksagung erhalten: 33 Mal
- Kontaktdaten:
Hallo Jan,
im Handbuch steht ein Beispiel wie der Codeblock zu bauen ist - hier bei 2 dimensionalem Array.:
du hast einen Parameter hier a, der ein Array Element übergibt.
Nun brauchst du noch z.B. den Suchbegriff hier als String.
So müsste es gehen, wenn nur ein eindimensionales Array besteht:
wobei = linksbündig sucht und == EXACT ON entspricht.
im Handbuch steht ein Beispiel wie der Codeblock zu bauen ist - hier bei 2 dimensionalem Array.:
Code: Alles auswählen
AScan( aArray, ; // Suchen ab nStart
{|a| ".DBF" $ Upper( a[F_NAME] ) .OR.;
".NTX" $ Upper( a[F_NAME] ) },
Nun brauchst du noch z.B. den Suchbegriff hier als String.
So müsste es gehen, wenn nur ein eindimensionales Array besteht:
Code: Alles auswählen
local cSuch := "irgendwas"
x := aScan(aArray,{|a| upper(a) == upper(cSuch) } )
Gruß
Hubert
Hubert