Hallo Leute!
Wenn man bei einer Listbox mit der Tastatur nach entsprechenden Einträgen sucht, habe ich immer das Problem, dass er bei jedem eingegebenen Buchstaben wieder von neuem beginnt zu suchen und nicht die einzelnen Buchstaben aneinander reiht.
Beispiel: Meine Listbox hat 3 Einträge:
Anna
Hubert
Silke
Norbert
Wenn ich jetzt mit der Tastatur A eingebe, markiert dieser 'Anna', was gut ist. Gebe ich jetzt aber gleich darauf noch n ein, bleibt dieser nicht bei Anna, sondern jupt zu Norbert.
Kann man dies irgendwie umgehen, dass er nach der eingegebenen Zeichenkette sucht?
Grüsse aus der Schweiz
WEY
ListBox suchen per Tastatureingabe
Moderator: Moderatoren
- AUGE_OHR
- Marvin
- Beiträge: 12909
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: ListBox suchen per Tastatureingabe
das macht jede Listbox unter Windows so.__WEY hat geschrieben:Wenn man bei einer Listbox mit der Tastatur nach entsprechenden Einträgen sucht, habe ich immer das Problem, dass er bei jedem eingegebenen Buchstaben wieder von neuem beginnt zu suchen und nicht die einzelnen Buchstaben aneinander reiht.
jedes Xbpart hat den Callback ":keyboard" mit dem du dir sowas selbst "bauen" kannst.__WEY hat geschrieben:Kann man dies irgendwie umgehen, dass er nach der eingegebenen Zeichenkette sucht?
gruss by OHR
Jimmy
Jimmy
- Martin Altmann
- Foren-Administrator
- Beiträge: 16517
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: ListBox suchen per Tastatureingabe
Moin,
das musst Du in Deinem keyhandler bewerkstelligen!
Wann immer eine normale Taste gedrückt wird, musst Du den bisher gemerkten Ausdruck um das Zeichen ergänzen und suchen.
Ansonsten musst Du auch berücksichtigen, dass bei einer Bewegung mit dem Cursor hoch/runter bzw. anderen Tasen (wie Pos1/Ende, Bild hoch/runter) der Suchstring zurückgesetzt wird
Viele Grüße,
Martin
Jimmy war schneller...
das musst Du in Deinem keyhandler bewerkstelligen!
Wann immer eine normale Taste gedrückt wird, musst Du den bisher gemerkten Ausdruck um das Zeichen ergänzen und suchen.
Ansonsten musst Du auch berücksichtigen, dass bei einer Bewegung mit dem Cursor hoch/runter bzw. anderen Tasen (wie Pos1/Ende, Bild hoch/runter) der Suchstring zurückgesetzt wird
Viele Grüße,
Martin
Jimmy war schneller...
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 164
- Registriert: Mo, 09. Jan 2006 17:06
- Wohnort: Paderborn
- Hat sich bedankt: 2 Mal
- Kontaktdaten:
Re: ListBox suchen per Tastatureingabe
Hallo WEY,
ich habe so etwas mal für die Combobox umgesetzt - ich denke, bei der Listbox muß das so ähnlich laufen:
Ich hoffe, es hilft...
Hans
ich habe so etwas mal für die Combobox umgesetzt - ich denke, bei der Listbox muß das so ähnlich laufen:
Code: Alles auswählen
// abgeleitete ComboBoxklasse zur Realisierung einer speziellen
// Keyboard-Behandlung
//
CLASS xComboBox FROM xbpComboBox
EXPORTED:
VAR keyBuffer
VAR aItems
METHOD init
METHOD keyboard
METHOD killInputFocus
METHOD addItem
METHOD delItem
METHOD insItem
METHOD searchItem
METHOD getTopItemContent
ENDCLASS
// Init-Methode
//
METHOD xComboBox:Init(oParent, oOwner, aPos, aSize, aPP, lVisible)
::xbpComboBox:Init(oParent, oOwner, aPos, aSize, aPP, lVisible)
::keyBuffer := ""
::bufferlength := 5
::aItems := {}
RETURN self
// addItem überladen, um aItems mit zu pflegen
//
METHOD xComboBox:addItem (cItem)
AADD(::aItems, cItem)
RETURN ::xbpComboBox:addItem(cItem)
// insItem überladen, um aItems mit zu pflegen
//
METHOD xComboBox:insItem (nPos, cItem)
AINS(::aItems, nPos, cItem)
RETURN ::xbpComboBox:insItem(nPos,cItem)
// delItem überladen, um aItems mit zu pflegen
//
METHOD xComboBox:delItem (nPos)
ADEL(::aItems, nPos)
RETURN ::xbpComboBox:delItem(nPos)
// gibt direkt den Inhalt des TopItems aus
//
METHOD xComboBox:getTopItemContent ()
LOCAL nPos := ::getTopItem ()
RETURN ::getItem(nPos)
// sucht einen Suchbegriff im aItems-array
// und gibt die Position im Array zurück
// wird nichts gefunden, ist der Rückgabewert 0
//
METHOD xComboBox:searchItem (cSearch)
LOCAL nLen := LEN(TRIM(::keyBuffer))
RETURN ASCAN(::aItems,{|a|LEFT(a,nLen) == cSearch})
// abgeleitete KeyBoard-Methode, damit in Comboboxen die Markierung
// der Eingabe folgt
//
METHOD xComboBox:keyBoard (nKey)
LOCAL nPos := 0
LOCAL i := 0
LOCAL iMax := ::numItems()
LOCAL aPos := {}
// Buchstabentasten
IF nKey >= 32 .AND. nKey <= 255
// Listbox aufklappen
::listboxfocus(.T.)
// Taste an Puffer anhängen..
::keyBuffer += Chr(nKey)
// ...und Puffer mit dem Inhalt der Listbox vergleichen
nPos := ::searchItem (UPPER(::keyBuffer))
// wenn Puffer und Listboxelement übereinstimmen,
// das Element zum TopItem machen
IF nPos > 0
::setTopItem(nPos)
aPos := {nPos}
// setData mit 2.Parameter .T. markiert den entsprechenden Eintrag der Listbox
::xbpListBox:setData(aPos,.T.)
ELSE
// keine Entsprechung gefunden: mit Key vergleichen
::keyBuffer := Chr(nKey)
// ...und Puffer mit dem Inhalt der Listbox vergleichen
nPos := ::searchItem (UPPER(::keyBuffer))
IF nPos > 0
::setTopItem(nPos)
aPos := {nPos}
// setData mit 2.Parameter .T. markiert den entsprechenden Eintrag der Listbox
::xbpListBox:setData(aPos,.T.)
ELSE
// keine Entsprechung gefunden: Puffer leeren
::keyBuffer := ""
ENDIF
ENDIF
RETURN self
ENDIF
RETURN ::xbpComboBox:keyBoard(nKey)
// wenn die Combobox den Fokus verliert,
// wird der KeyBoard-Suchpuffer geleert
//
METHOD xComboBox:killInputFocus( )
// Keyboardpuffer wieder leeren
::keyBuffer := ""
RETURN ::xbpComboBox:killInputFocus()
Hans
Re: ListBox suchen per Tastatureingabe
HEY HAMMER! IHR SEID MIR ECHT WAHRE HELDEN!
Vielen Dank, es hat nun hingehauen, dank euren hilfreichen Tipps und Erklärungen!
Thanks!
WEY
Vielen Dank, es hat nun hingehauen, dank euren hilfreichen Tipps und Erklärungen!
Thanks!
WEY