Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi ComboBox Item-Auswahl mit Enter (https://www.delphipraxis.net/151401-combobox-item-auswahl-mit-enter.html)

WorstNightmare 16. Mai 2010 18:04


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.

mirage228 16. Mai 2010 18:11

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

WorstNightmare 16. Mai 2010 18:28

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:
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;
Ich wähle das Item aus indem ich in die Box z.B. "Silver Ore" eingebe und dann Enter drücke.

mirage228 16. Mai 2010 19:05

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 Delphi-Referenz durchsuchenComboBoxEx (mit zusätzlich Delphi-Referenz durchsuchenaoAutoSuggest) zu umgehen. Vielleicht ist die ja für Dich in diesem Fall auch passend...

Viele Grüße

WorstNightmare 16. Mai 2010 19:47

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 16:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz