Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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 per Hand füllen (https://www.delphipraxis.net/115030-combobox-per-hand-fuellen.html)

lore 4. Jun 2008 16:30


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]

DeddyH 4. Jun 2008 16:35

Re: Combox per Hand füllen
 
Ich habe hier eine ComboBox mit Style csDropDown. In deren OnKeyDown habe ich Folgendes:
Delphi-Quellcode:
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;
Meintest Du so etwas?

bluesbear 4. Jun 2008 17:08

Re: Combox per Hand füllen
 
Zitat:

Zitat von lore
PS: habt's ihr 'ne Buchempfehlung dazu?

Nein, aber wir haben DeddyH :duck:
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?

DeddyH 4. Jun 2008 17:10

Re: Combox per Hand füllen
 
Durch den Style csDropDown bleibt der String einfach stehen :zwinker:

Fussball-Robby 4. Jun 2008 17:14

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;

FAlter 4. Jun 2008 17:39

Re: Combox per Hand füllen
 
Hi,

ich kürz ihn mal wieder...

Delphi-Quellcode:
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;
Mfg
FAlter

taaktaak 4. Jun 2008 17:42

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...

bluesbear 4. Jun 2008 17:55

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>

taaktaak 4. Jun 2008 18:07

Re: Combox per Hand füllen
 
Damit wollte ich vorsichtig andeuten, dass ich dafür ziemlich lange 'rumgefummelt habe bis es funktionierte.

lore 4. Jun 2008 19:26

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:

http://www.deepskyobserver.de/downloads/comboBox.jpg


------------------------------------------------------------------------------------
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 02:30 Uhr.
Seite 1 von 4  1 23     Letzte »    

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