ComboBox Item umbenennen



  • Hallo

    @ raimond : Du benennst nicht ein Item um sondern ersetzt es.
    Das umbenennen geht einfacher

    ComboBox1->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 Event

    if(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 deklariert

    und bei meinem speichern Button ist jetzt:

    ComboBox1->Items->Strings[item_nr] = ComboBox1->Text;
    

    Aber das entspricht auch in etwa Akaris Vorschlag.

    Gruß Mark


Anmelden zum Antworten