ComboBox Item umbenennen
-
Hallo,
wie kann ich denn während der Laufzeit bei einer ComboBox das aktive Item umbennen? Habe mir eine Stunde Beiträge zum Thema ComboBox durchgelesen, aber
mein Problem war nicht behandelt.Gruß Mark
-
Hi, versuchs mal so:
int i = this->ComboBox1->ItemIndex; //auslesen des aktiven items ComboBox1->Items->Delete(i); //löschen des selbigen ComboBox1->Items->Insert(i, "Neuer Eintrag"); //einfügen des neuen Eintrags an selber Stelle ComboBox1->ItemIndex = i; //Gehe zu dem Eintragmfg
Rai
-
Hallo
@ raimond : Du benennst nicht ein Item um sondern ersetzt es.
Das umbenennen geht einfacherComboBox1->Items->Strings[ComboBox1->ItemIndex] = "Neuer Eintrag";Das hätte man auch der BCB-Hilfe zu TComboBox/TStringList herausfinden können.
bis bald
akari
-
Danke erstmal,
aber ich würde gerne das aufgerufene Item in der ComboBox ändern, nur sobald ich das tue springt der Index auf -1 zurück.
meine Hoffnung war diese Modifikation:
[cpp]
int i = this->ProfilnameBox->ItemIndex; //auslesen des aktiven items
ProfilnameBox->Items->Delete(i); //löschen des selbigen
ProfilnameBox->Items->Insert(i, ProfilnameBox->Text); //einfügen des neuen Eintrags an selber Stelle
ProfilnameBox->ItemIndex = i; //Gehe zu dem Eintrag
[/cpp]
das führt aber dazu das ein weiteres Item eingefügt wird.
-
Hallo
Siehe meinen Post.
Natürlich wäre es noch klug vorher zu überprüfen ob ItemIndex >= 0 ist, sonst gibts einen Laufzeitfehler.bis bald
akari
-
Hallo Akari,
Dein Post hatte ich noch nicht gelesen als ich am schreiben war.So hatte ich es auch gesehen, aber wie kann ich den ItemIndex speichern und vor allem wann,
denn sobald ich in die Box schreibe springt deren ItemIndex auf eben die -1.
Ich könnte einen Button der einen Edit-Modus auslöst hinzufügen, aber ich würde halt gerne einfach das Item überschreiben und speichern klicken.
-
Hallo
Verwende den OnChange-Event der ComboBox. Da kannst du nach jeder Auswahl eiens Items den ItemIndex in eine Membervariable des Forms zwischenspeichern. Diesen Buffer kannst du dann später wieder verwenden.
bis bald
akari
-
genau da beißt sich die Katze in den Schwanz - das OnChange-Event wir auch beim
Überschreiben einens Items ausgelöst und dann habe ich wieder -1.
-
Hallo
Dann must du noch ein bool-Flag als Member des Forms verwenden. Sobald du ein Item ändern willst setzt du das Flag auf false, danach wieder auf true. Und nun kannst du im OnChange-Event zuerst dieses Flag überprüfen. Ist es auf false, überschreibst du den ItemIndex-Buffer nicht.
bis bald
akari
-
ok, jetzt habe ich es kapiert und so klappt es dann auch.
Vielen Dank an alle.
-
warum nicht einfach so ?
int index = ComboBox1->ItemIndex; ComboBox1->Items->Strings[index] = "Neuer Eintrag"; ComboBox1->ItemIndex = index;
-
weil der neue Eintrag nicht einfach "neuer Eintrag" sondern ComboBox1->Text sein soll und schreiben in die ComboBox einen OnChange Event auslöst der den Item Index auf -1 setzt und zwar bereits beim eintippen und nicht erst beim verlassen des Focus. Aber ich habe jetzt so gelöst:
Im OnChange Eventif(ComboBox1->ItemIndex!=-1) { item_nr=ComboBox1->ItemIndex; };Damit bleibt item_nr auf dem letzten echtem Item stehen.
die Variable int item_nr ist im Header als privat deklariertund bei meinem speichern Button ist jetzt:
ComboBox1->Items->Strings[item_nr] = ComboBox1->Text;Aber das entspricht auch in etwa Akaris Vorschlag.
Gruß Mark