Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Combobox sortieren funktioniert nicht (https://www.delphipraxis.net/169294-combobox-sortieren-funktioniert-nicht.html)

Pow3rus3r 10. Jul 2012 10:59

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:
    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;
siganz ist dabei eine Zählervariable, die hochgezählt wird (von 1 bis EOF). signallist ist ein Array eines selbst angelegten Records.


Danke für alle Tipps!

Gruß,
Thomas

Bummi 10. Jul 2012 11:11

AW: Combobox sortieren funktioniert nicht
 
Nein, aber Du kannst per AddObject('Text',TObject(i)) die nötigen Informationen ablegen.

DeddyH 10. Jul 2012 11:11

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

p80286 10. Jul 2012 11:20

AW: Combobox sortieren funktioniert nicht
 
Zitat:

Zitat von Pow3rus3r (Beitrag 1174175)
ich spreche die Einträge über den Itemindex an

Meiner Meinung nach ist das nicht ganz im Sinne des Erfinders, da über den Eintrag in Items etwas anderes ausgewählt werden soll.
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

Pow3rus3r 10. Jul 2012 11:39

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.

Bummi 10. Jul 2012 11:46

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]);

himitsu 10. Jul 2012 11:53

AW: Combobox sortieren funktioniert nicht
 
Das Sorted setzt nur MSDN-Library durchsuchenCBS_SORT, und wie das arbeitet, sollte man mal im MSDN nachlesen.

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:
cmbsignalnames.Perform(CM_RECREATEWND, 0, 0);
auf, wenn es immer auf True steht.



Nur mal so als nebensächliche Frage:
Wieso nutzt du die Variable form1?

Pow3rus3r 10. Jul 2012 12:10

AW: Combobox sortieren funktioniert nicht
 
Zitat:

Zitat von himitsu (Beitrag 1174184)
Nur mal so als nebensächliche Frage:
Wieso nutzt du die Variable form1?

Ich fülle die Liste in einer procedure "procedure readdefines(var busname:string; busnumber: word);"

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?

Bummi 10. Jul 2012 12:12

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

DeddyH 10. Jul 2012 12:13

AW: Combobox sortieren funktioniert nicht
 
Mach aus der Prozedur eine Methode, schon kannst Du auch auf die eigenen Controls zugreifen.
Delphi-Quellcode:
procedure TForm1.readdefines(var busname:string; busnumber: word);
[edit] *Pfh* schon wieder zu spät, macht Euren Mist doch alleine :tongue: [/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.
Seite 1 von 2  1 2      

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