ComboBox::keine doppelten Einträge
-
Hallo,
wie kann ich aus einer TComboBox doppelt vorhandene Einträge entfernen, also dass es von jedem Eintrag nur noch Einen gibt und keiner doppelt vorkommt? Hab leider im Forum nix passendes gefunden.
thx luke
-
Willst Du jetzt wissen, wie man die doppelten Einträge ermittelt oder wie man die physisch aus der ComboBox entfernt?
Für letzteres: siehe Eigenschaft Items in der Hilfe.
Für Ersteres: da könnte man nun ausholen... Das aller einfachste und bei wenigen Einträgen kein Problem: zwei for() Schleifen. In der äußeren wird das aktuelle Element ermittelt und in der inneren mit allen anderen Einträgen verglichen. Das überflüssige wird entfernt.
Noch besser: gleich beim Einfügen der Elemente nur die einfügen, die auch wirklich hinein müssen.
-
<JFK>: Die letzte Variante ist nicht nur besser sondern die Einzig akzeptable (-;
luketjm: Vielleicht helfen dir in diesem Zusammenhang die Funktion TComboBox::Lines::IndexOf und Konsorten?
(näheres in der BCB hilfe)-junix
-
@junix: das war auch mein Ansatz. Bevor ich das neue Element in die ComboBox aufnehme durchsuche ich die ComboBox, ob der Eintrag evtl schon vorhanden ist. Ich wollte das über eine for-schleife machen, wo ich jedes item der ComboBox mit dem neuen element vergleiche und wenn es nicht mit dabei ist fügt er es hinzu.
Doch genau dieser vergleich macht mir probleme. wie kann ich die einzelnen items aus der CB wieder rausholen?
Evtl mit Form1->ComboBox1->Items->Strings[i] ?(((Die BCB Hilfe schweigt sich leider ziemlich über TComboBox aus)))
thx Luke
-
Was heisst schweigt sich aus? Bei mir hab ich sauberst die Eigenschaften aufgelistet auf die ich dann klicken kann... Eventuell hilft dir Dieser Artikel weiter.
Sieh dir nochmals meinen Hinweis oben an. Das geht auch ohne For und wesentlich bequemer.
-junix
-
ich benutze die hilfe sehr oft. vielleicht fehlen bei mir einträge, die du hast? Bei mir gibts keinen Eintrag Linesoder IndexOf unter TComboBox
luke
[ Dieser Beitrag wurde am 02.04.2003 um 13:43 Uhr von luketjm editiert. ]
-
Also... du klickst bei TComboBox oben auf "Eigenschaften" im neuen Fenster suchst du dir "Lines" und so weiter... Welche BCB Version hast du denn? Ich kenn das Teil seit V1.0 und es ist seit 1.0 bereits ein Eintrag vorhanden.
-junix
-
Ich habs raus:
bool exist=false; for(int i=0; i<Form1->ComboBox1->Items->Count; i++) if(Trim(anwendung)==Form1->ComboBox1->Items->Strings[i]) exist=true; // if(!exist) Form1->ComboBox1->Items->Add(Trim(anwendung));
thx@all Luke
-
ich benutze den bcb5 und unter Eigenschaften von TComboBox steht
" Canvas
CharCase
DropDownCount
DroppedDown
ItemHeight
ItemIndex
Items
MaxLength
SelLength
SelStart
SelText
Sorted
Style"
nix Lines! Komisch?!, naja...
luke
-
Ah, hatte nen fehler gemacht... meinte natürlich TComboBox::Items::IndexOf...
Na gut, mit mitdenken hättest du auch selber drauf kommen können... denn worauf in der ComboBox willst du zugreifen? Die Items...
-junix
-
Logisch
Ich vertrau Dir eben...
-
Hi,
Original erstellt von luketjm:
**```cpp
bool exist=false;
for(int i=0; i<Form1->ComboBox1->Items->Count; i++)
if(Trim(anwendung)==Form1->ComboBox1->Items->Strings[i]) exist=true;
//
if(!exist) Form1->ComboBox1->Items->Add(Trim(anwendung));vielleicht noch etwas besser wenn dus schon mit der for machen willst:
bool notexist=true; for(int i=0; (i<Form1->ComboBox1->Items->Count) && (notexist); i++) if(Trim(anwendung)==Form1->ComboBox1->Items->Strings[i]) notexist=false; if(notexist) Form1->ComboBox1->Items->Add(Trim(anwendung));
oder:
String TextZumEinfügen; if(Form1->ComboBox1->Items->IndexOf(TextZumEinfügen==-1) Form1->ComboBox1->Items->Add(Trim(anwendung));
Alexander Sulfrian
Tip: Manchmal lohnt sich auch ein Blick in die Methoden! (nicht nur die Eigenschaften)
?dit: Formatierung
[ Dieser Beitrag wurde am 02.04.2003 um 16:36 Uhr von Alexander Sulfrian editiert. ][ Dieser Beitrag wurde am 02.04.2003 um 16:37 Uhr von Alexander Sulfrian editiert. ]
-
ach nee passt schon! aber danke