![]() |
ComboBox Item-Auswahl mit Enter
Hallo,
ich nutze eine ComboBox im Style "csDropDown" um eine große Zahl an Daten darzustellen (ca. 10000 Items). Mein Problem ist: Wenn ich ein Item mit Enter auswähle wird zwar OnChange aufgerufen und erweiterte Daten (aus Objects[]) werden angezeigt, wenn ich dann aber einen Button drücke der ItemIndex abfragt, ist er -1. Ich glaube das Item wird gar nicht richtig ausgewählt wenn ich Enter benutze (mit der Maus geht es einwandfrei) oder der Index ändert sich wenn die Box den Fokus verliert (denn für kurze Zeit ist der Index ja richtig, wenn OnChange aufgerufen wird). Weiß jemand wie ich erreichen kann, dass der Index auch richtig gesetzt wird wenn ich mit Enter auswähle? Ich möchte nicht den Style der ComboBox ändern, denn AutoComplete erleichtert das Finden von Einträgen bei einer solchen Menge schon sehr. |
Re: ComboBox Item-Auswahl mit Enter
Moin,
Zeig mal den genauen Code. Ich kann das Problem so anhand der Beschreibung nicht reproduzieren (D2010 Professional auf Windows 7). Habe eine ComboBox mit ein paar Items auf das Form gezogen. Dazu zwei Labels, wovon das eine im OnChange der ComboBox und das andere beim Klick auf einen zusätzlichen Button den Wert von ItemIndex erhält. Kam kein mal -1 vor bei mir. Viele Grüße |
Re: ComboBox Item-Auswahl mit Enter
Meine ComboBox hat AutoDropDown und Sorted aktiviert, sonst alles Standardwerte. Items werden zur Laufzeit aus Datei geladen und eingefügt.
Delphi-Quellcode:
Ich wähle das Item aus indem ich in die Box z.B. "Silver Ore" eingebe und dann Enter drücke.
type
TItemEntry = class public ID, Desc: string; constructor Create(AID, ADesc: string); end; TIDEntry = class public ID: string; constructor Create(AID: string); end; ... procedure TfrmMain.cbItemsChange(Sender: TObject); begin if cbItems.ItemIndex > -1 then begin lblID.Caption := TItemEntry(cbItems.Items.Objects[cbItems.ItemIndex]).ID; lblDesc.Caption := TItemEntry(cbItems.Items.Objects[cbItems.ItemIndex]).Desc; end; end; procedure TfrmMain.btnAddClick(Sender: TObject); begin Showmessage(inttostr(cbItems.ItemIndex)); // <-- da -1 mmSQL.Lines.Add(Format(' (%s, %s, %d, %d),', [TIDEntry(cbMobs.Items.Objects[cbMobs.ItemIndex]).ID, TItemEntry(cbItems.Items.Objects[cbItems.ItemIndex]).ID, seQuest.Value, seChance.Value])); end; procedure TfrmMain.cbItemsKeyPress(Sender: TObject; var Key: Char); begin if Key = #13 then Showmessage(IntToStr(cbItems.ItemIndex)); // <-- hier ist er noch normal. Allerdings scheint die Box direkt danach auf -1 zu gehen, das ist nur so wenn hier ShowMessage ist. end; |
Re: ComboBox Item-Auswahl mit Enter
Stimmt, mit AutoDropDown = TRUE habe ich diesen Effekt auch. Scheint ein "Problem" der VCL zu sein. Jedoch war ich in der Lage, dieses Verhalten durch Verwendung einer
![]() ![]() Viele Grüße |
Re: ComboBox Item-Auswahl mit Enter
Na gut, habe jetzt auf ComboBoxEx umgestellt und da besteht das Problem in der Tat nicht.
Da es kein Sorted gibt benutze ich auch ItemsEx, allerdings habe ich festgestellt, dass wenn man den Pfeil mit der Maus drückt das normale, unsortierte Items Menü kommt und nur wenn man auf der Tastatur die nach unten Taste benutzt kommt das sortierte ItemsEx Menü. Kann man irgendwie erreichen dass er immer ItemsEx benutzt? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:30 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