![]() |
Combobox sortieren funktioniert nicht
Hallo zusammen,
ich habe eine Combobox, die ich sortieren muss, jedoch tut sich nach setzen von ".sorted := true" nichts... Testweise in einem neuen Projekt habe ich es genauso getestet und es funktionierte (jedoch wurden die Itemindezes aller Einträge dann durcheinander geworfen (ich spreche die Einträge über den Itemindex an). Gibt es irgendeine Möglichkeit, die Combobox zu stortieren (nach Alphabet), ohne dass sich die Indezes ändern (dass z.B. der erste Eintrag in der Liste den Index 5 und der 2. Eintrag in der Liste Index 1 hat usw.)? hier mal ein Quellcodeauszug der Stellen, an denen die Combobox befüllt wird:
Delphi-Quellcode:
siganz ist dabei eine Zählervariable, die hochgezählt wird (von 1 bis EOF). signallist ist ein Array eines selbst angelegten Records.
form1.cmbsignalnames.Items.Insert(0, '- Signal auswählen -');
form1.cmbsignalnames.ItemIndex := 0; form1.cmbsignalnames.items.insert(siganz, form1.Signallist[siganz].Name); form1.cmbsignalnames.Sorted := true; Danke für alle Tipps! Gruß, Thomas |
AW: Combobox sortieren funktioniert nicht
Nein, aber Du kannst per AddObject('Text',TObject(i)) die nötigen Informationen ablegen.
|
AW: Combobox sortieren funktioniert nicht
Der ItemIndex gibt an, an welcher Stelle in der Liste der String zu finden ist. Man kann also nicht sortieren, ohne dass sich der ItemIndex ändert. Du könntest Dir aber etwas Eigenes ausdenken und das in der Objects-Eigenschaft ablegen (ggf. per Typecast).
|
AW: Combobox sortieren funktioniert nicht
Zitat:
Ich plädiere in solchen Fällen für eine parallele Datenstruktur (Liste) in der sich die Nuzdaten befinden. Die Combobox sollte nur für die angezeigten Auswahlmöglichkeiten genutzt werden. Gruß K-H |
AW: Combobox sortieren funktioniert nicht
Danke für die Antworten!
Die Sache mit Addobject klingt interessant - nur was muss ich für TObject dort übergeben (sodass ich meinen Signalindex, mit dem ich die Signale in der Combobox identifiziere) eindeutig festlegen kann und dann die Combobox alphabetisch sortieren kann? Hintergrund ist folgender: Ich habe eine Textdatei, in der Signalnamen stehen und deren Details (Bitlänge, Adressen usw.). Die textdatei ist aber unsortiert, d.h. die Signalnamen sind nicht alphabetisch sortiert. Ich lese die Signale aber nacheinander ein und speichere die Details in einem Array eines Records. Die Position der Signalnamen in der Textdatei nutze ich als eindeutige ID, um die Signale anzusprechen (da ich sie glaube ich nicht über den Namen direkt ansprechen kann, in dem Record (oder ist das möglich, dann hätte sich mein Problem schon erledigt)? Wenn ich nun meine Combobox sortiere, geht derBezug zwischen ID und Namen in der Combobox verloren, wodurch die Signale quer durcheinander sind. |
AW: Combobox sortieren funktioniert nicht
Delphi-Quellcode:
// einfügen
ComboBox1.Items.AddObject(aRecordArray[i].Text,TObject[i]); // auslesen RecordIndex := Integer(ComboBox1.Items.Objects[ComboBox1.ItemIndex]); |
AW: Combobox sortieren funktioniert nicht
Das Sorted setzt nur
![]() Insert mit festen Positionen und Sortieren ist irgendwie kontraproduktiv. PS: Eine TStringList knallt dir sogar eine Exception entgegen, wenn man dort sowas versucht. War das Sorted vorher schon auf True? Setze es mal auf False und danach wieder auf True, oder rufe
Delphi-Quellcode:
auf, wenn es immer auf True steht.
cmbsignalnames.Perform(CM_RECREATEWND, 0, 0);
Nur mal so als nebensächliche Frage: Wieso nutzt du die Variable form1? |
AW: Combobox sortieren funktioniert nicht
Zitat:
Wenn ich dort form1 nicht angebe, bekomme ich einen Fehler, dass er das Steuerelement nicht findet. Ich dachte eigentlich, dass die Steuergeräte global ansprechbar sind. Oder muss man hier irgendwo noch was veröffentlichen? |
AW: Combobox sortieren funktioniert nicht
Du könntest cmbsignalnames und Signallist als Parameter übergeben (notfalls auch Form1), oder aus der Prozedur in der es geschieht, sofern in From1 als Methode von Form1 implementieren
|
AW: Combobox sortieren funktioniert nicht
Mach aus der Prozedur eine Methode, schon kannst Du auch auf die eigenen Controls zugreifen.
Delphi-Quellcode:
[edit] *Pfh* schon wieder zu spät, macht Euren Mist doch alleine :tongue: [/edit]
procedure TForm1.readdefines(var busname:string; busnumber: word);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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 by Thomas Breitkreuz