![]() |
ComboBox per Hand füllen
Frage zur ComboBox:
ich will drei Sachen zur Auswahl haben (soweit nicht schwer) und der User darf aber noch weiter Sachen dazu schreiben die dann automatisch mit aufgenommen werden. Geht das mit der Combobox oder muss ich da auch noch ein Edit-Feld verwenden? Wenn ich versuche über den Items den neuen Text wieder mit ins DropDownMenü zu schreiben, funzt es nicht. Mir ist leider auch die Logik noch nicht so ganz klar, ob ich erst alles durchzählen muss dann einen dazuschreiben (CBox1.Items.count +1)...und ist das dann auch der selektierte....oder..??? Nachdem ich schon das halbe internet durchgelesen habe, stelle ich die Frage dann doch mal hier :oops: Danke für die Antworten schonmal vorab, Karsten PS: habt's ihr 'ne Buchempfehlung dazu? [edit=SirThornberry]Titel korrigiert - Mfg, SirThornberry[/edit] |
Re: Combox per Hand füllen
Ich habe hier eine ComboBox mit Style csDropDown. In deren OnKeyDown habe ich Folgendes:
Delphi-Quellcode:
Meintest Du so etwas?
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin if Key = VK_RETURN then begin if ComboBox1.Items.IndexOf(ComboBox1.Text) < 0 then ComboBox1.Items.Add(ComboBox1.Text); end; end; |
Re: Combox per Hand füllen
Zitat:
Scherz beiseite: Darauf war ich noch gar nicht gekommen. In solchen Situationen mache ich immer einen Knopf neben die Combo, der einen kleinen Listeneditor aufruft. Schließlich muß der Anwender Einträge ja auch wieder löschen können, z.B. wegen Tippfehlern oder so. Mit dem DeddyH seiner Idee würde ein Löschknopf reichen :gruebel: @DeddyH: Muss man danach noch ItemIndex setzen, oder selektiert sich der Eintrag dadurch quasi selber? |
Re: Combox per Hand füllen
Durch den Style csDropDown bleibt der String einfach stehen :zwinker:
|
Re: Combox per Hand füllen
Wenn man dann aber per Items[ItemIndex] darauf zugreifen will, ist kein Item ausgewählt, jedoch kann man den Code ohne weiteres noch durch eine Zeile erweitern:
Delphi-Quellcode:
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin with TComboBox(Sender) do if Key = VK_RETURN then begin if Items.IndexOf(Text) < 0 then Items.Add(Text); ItemIndex := Items.IndexOf(Text); end; end; |
Re: Combox per Hand füllen
Hi,
ich kürz ihn mal wieder...
Delphi-Quellcode:
Mfg
procedure TForm1.ComboBox1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin with TComboBox(Sender) do if Key = VK_RETURN then if Items.IndexOf(Text) < 0 then ItemIndex := Items.Add(Text); end; FAlter |
Re: Combox per Hand füllen
Übrigens, auch ein "Löschknopf" ist entbehrlich: Mit etwas Geschick benutzt man dazu einfach die Taste "Entf" auf der Tastatur - und schon ist der Eintrag aus der Liste weggezaubert. So funktioniert das z.B. auch in Outlook...
|
Re: Combox per Hand füllen
Die Entf-Taste benutzt man normalerweise zum editieren des Strings selber. Ich finde das nicht besonders intuitiv, die zum löschen von Listeneinträgen herzunehmen.
Oder was meinst du mit "etwas Geschick"? PS: Outlook macht manchmal komische Sachen, deshalb nehme ich Thunderbird <g> |
Re: Combox per Hand füllen
Damit wollte ich vorsichtig andeuten, dass ich dafür ziemlich lange 'rumgefummelt habe bis es funktionierte.
|
Re: ComboBox per Hand füllen
Hi deddyH, und auch alle anderen.
Jo, genau das meinte ich, nur dass beim nächsten Start der Applikation der neue Eintrag wieder zur Verfügung stehen muss. Habe ich bspw. eine neuen Eintrag erstellt wie myTimeZone oder UT + 5, so muss ich das nachher wieder benutzen können. Wie also speichern? In der Ini wäre gut, da es aber dann immer mehr werden müsste der String in der INI iteriert werden, oder? Frage: Wie macht man eine Schleife, die dann über ini.IniWritestring('Standort','Timezone[i]','??'); erstellt? Der eingetragen Wert "myTimeZone", "UT" oder was auch immer ins combobox1.text eingegeben wurde, muss dann in der INI stehen...und beim löschen auch wieder gelöscht werden. :gruebel: ![]() ------------------------------------------------------------------------------------ btw. falls jemand mal über ein Maskedit Koordinaten einbauen will, hier die Lösung: eigenschaft editMask: !99\°\ 99\'\ 99\";1;_ oder aber den Eintrag unter: C:\Program Files\CodeGear\RAD Studio\5.0\bin\germany.DEM editieren und "Koordinaten | 53° 44' 09" | !99\°\ 99\'\ 99\";1;_" reinkopieren ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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