![]() |
Fokus in Liste der Combobox
Hallo
Irgendwie steh ich auf dem Schlauch und komme einfach nicht weiter. Vielleicht kann mir jemand helfen? Ich möchte eine Combobox mit vielen Einträgen filtern und verwende dazu die untenstehende Prozedur welche bei Onchange aufgerufen wird. Das funktioniert eigentlich ganz gut, wenn alle Einträge mit dem Suchbegriff beginnen. Hat es aber Einträge in der Combobox welche anders beginnen, dann wird nicht das erste angezeigte Element fokusiert, sondern das welches mit dem Suchbegriff beginnt. Beispiel Suchbegriff 'Reis' Combobox enthält dann Basmatireis, Reismix, Trockenreis, Wildreis wenn nun die Liste den Fokus erhält ist nicht Basmatireis sondern Reismix markiert! Wenn ich mit AnsiStartsText(Combo.Text, Origin[I]) filtere funktioniert es, da nur noch Elemente in der Combobox sind die mit dem Suchbegriff beginnen. Wie bekomme ich es hin, dass das erste Item in der Liste markiert ist. Kann mir jemand weiterhelfen?
Delphi-Quellcode:
Danke + Gruss
procedure FilterComboBox(Combo: TComboBox; DefaultItems: TStrings);
function Origin: TStrings; begin if Combo.Tag = 0 then begin Result := TStringList.Create; Result.Assign(Combo.Items); Combo.Tag := Integer(Result); end else Result := TStrings(Combo.Tag); end; var Filter: TStrings; I: Integer; iSelIni: Integer; begin Combo.Items.BeginUpdate; if(Combo.Text <> EmptyStr) then begin iSelIni:= Length(Combo.Text); Filter := TStringList.Create; try for I := 0 to Origin.Count - 1 do if AnsiContainsText(Origin[I], Combo.Text) then Filter.AddObject(Origin[I], TObject(Origin.Objects[I])); Combo.Items.Assign(Filter); Combo.SelStart := iSelIni; Combo.SelLength := Length(Combo.Text); finally Filter.Free; end; end else Combo.Items.Assign(DefaultItems); Combo.Items.EndUpdate; end; Armin |
AW: Fokus in Liste der Combobox
Vielleicht habe ich dein Problem nicht ganz verstanden. Aber guck dir mal
![]() |
AW: Fokus in Liste der Combobox
Ich denke dein Problem liegt darin, dass die ComboBox schon eine integrierte Funktion hat um bei Eingabe eines Textes die erste Übereinstimmung anzuzeigen. Die Übereinstimmung wird aber nicht anhand einer beliebigen Stelle im Wort festgestellt, sondern diese wird festgestellt indem der Anfang der Items mit dem eingegebenen Text verglichen wird. Daher glaube ich, dass eine Filterung der Daten, welche ausschließlich über die Combobox abläuft, nicht das gewünschte Ergebnis erzielt.
|
AW: Fokus in Liste der Combobox
Mit ItemIndex habe ich es bereits versucht, komme aber nicht weiter. Der Ansatz von Aviator hört sich sehr nach meinem Problem an, doch wie löse ich dieses?
|
AW: Fokus in Liste der Combobox
Zitat:
Delphi-Quellcode:
Oder eben so (Erster Treffer, wo Suchbegiff im Wort vorkommt)
for i := 0 to ComboBox1.Items.Count - 1 do
if AnsiCompareText(ComboBox1.Items[i], 'Testpizza') = 0 then begin ComboBox1.ItemIndex := i; Break; end;
Delphi-Quellcode:
for i := 0 to ComboBox1.Items.Count - 1 do
if Pos('Testpizza', ComboBox1.Items[i]) > 0 then begin ComboBox1.ItemIndex := i; Break; end; |
AW: Fokus in Liste der Combobox
Wenn ich ItemIndex setze funktioniert meine Filfterfunktion nicht...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz