Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - ComboBox Einträge auf verschieden Weisen ordnen


Gahero - Do 05.10.06 18:38
Titel: ComboBox Einträge auf verschieden Weisen ordnen
Hab ne Frage zu den ComboBoxen.

Ich hab eine Combobox mit fast 100 Einträgen, die alphabetisch geordnet sind. Ich will aber das der User auswählen kann, ob er alphabetisch oder nach einer anderen Art (die ich vorher festlege) die Einträe sortieren möchte.

Ist das irgendwie machbar?


Marco D. - Do 05.10.06 18:42

Nach welcher Art denn z.B.?


Gahero - Do 05.10.06 18:44

Das ist jetzt schwer zu sagen, weil es eigentlich willkürlich ist!

Sagen wir nach einer, die ich irgendwie vorher bestimme.
Wenn das nicht gehen sollte, kann ich auch Zahlen an die Einträge dranhängen, nach denen er dann ordnen soll, aber das stell ich mir ziemlich schwierig vor.


Marco D. - Do 05.10.06 19:06

Allgemein gesagt: Es ist möglich.

Sage doch trotzdem mal bitte ein Beispiel. Weil mehr als ein ja kann ich dir aufgrund der mangelnden Infos nicht geben.


Gahero - Do 05.10.06 19:25

Ok, es sind 118 Einträge!

Ich will 2 Radiobuttons haben. Wenn der eine markiert ist, soll er es alphabetisch beim klicken der Box ordnen, bei dem anderen Radiobutton nach einer willkürlichen Methode, alos so, dass ich es ihm vorher sagen kann wie er es machen soll!


Marco D. - Do 05.10.06 19:26

user profile iconGahero hat folgendes geschrieben:
Ok, es sind 118 Einträge!

Ich will 2 Radiobuttons haben. Wenn der eine markiert ist, soll er es alphabetisch beim klicken der Box ordnen, bei dem anderen Radiobutton nach einer willkürlichen Methode, alos so, dass ich es ihm vorher sagen kann wie er es machen soll!

Jetzt bin ich immer noch nicht schlauer als vorher. :roll:


Gahero - Do 05.10.06 19:34

Ja, was willst du den wissen, ich kann dir vllt erklären, wie die andere Sortierung aussehen soll; ich versuch es mal:

Ich habe neben der Combobox ein Editfeld, indem eine Zahl eingezeigt wird, wenn man einen Eintrag auswählt. Die zahlen sind von Eintrag zu Eintrag unterschiedlich, aber es gibt auch Einträge, die die gleiche Zahl zugewiesen bekommen haben. Das ganze hab ich mit if-Abfragen gemacht:


Delphi-Quelltext
1:
if ComboBox1.Text = 'Irgendwas' then variable := 5;                    


Die andere Sortiermethode soll die Einträge nun nach diesen Zahlen sortieren. (Die Zahlen gehen von 5-200)

Reicht das jetzt? :)


Gahero - Fr 06.10.06 23:23

Keiner ne Idee??? :cry:


Reinhard Kern - Sa 07.10.06 10:59

user profile iconGahero hat folgendes geschrieben:
Keiner ne Idee??? :cry:


Hallo,

was du mit der ComboBox machen willst, kann die zugrundeliegende ComboBox aus dem Windows-API schon immer: man kann zu jedem Eintrag eine 32-Bit-Zahl zusätzlich abspeichern - die kann man als Pointer verwenden oder als Zahl und danach sortieren, das ist der Box egal. Näheres findet man in der Windows-SDK-Hilfe unter CB_SETITEM bzw. CB_GETITEM. Deine zusätzlichen Felder sind also garnicht nötig.

Leider unterstützt die Delphi-Version diese Funktion nicht. Man kann aber wie immer sich das selbst dazuprogrammieren, ev. als neue Komponente, ist allerdings nicht ganz einfach.

Ein anderer Trick, der noch universeller ist: man hängt Zusatzdaten an die Strings an und fügt vorher soviele Tabs ein (oder setzt den Tababstand entsprechend), dass die Daten in der Box nicht sichtbar sind (Scrollbar abschalten).

Ein Eintrag könnte dann auch mehrere Zusatzdaten enthalten nach dem Schema:

SichtbarerEintrag TAB SortierDatum1 TAB SortierDatum2 usw.

Das Sortieren erfolgt einfach in Methoden:
ComboBox1.SortiereNachEintrag
ComboBox1.SortiereNachDatum1
...
ComboBox1.Sortiere (NachWas : integer)

Gruss Reinhard