CheckListBox Eintrag löschen



  • Hi Leude,

    kurze frage.
    Wie kann ich einen ausgewählten eintrag aus einer checkListBox löschen?

    Habe folgendes probiert:

    void __fastcall TForm1::wegClick(TObject *Sender)
    {
     for (int i=0; i<CheckListBox->Items->Count; i++)
      {
        if (CheckListBox->Checked[i])
         {
             CheckListBox->Items->RemoveAt[i];
         }
    
     }
    }
    

    Jetzt kommt folgender fehler mit dem ich nichts anfangen kann:
    [C++ Fehler] Test1.cpp(186): E2235 Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden

    Danke Bench



  • ich bekomm eher die Fehlermeldung
    [C++ Fehler] Unit1.cpp(24): E2316 'RemoveAt' ist kein Element von 'TStrings'

    da Items vom Typ TStrings ist, solltest du die Funktion Delete verwenden

    was steht denn in Zeile 186?



  • Hi ,

    sorry, habe schon Delete statt RemoveAt verwendet und da kommt die oben ganannte Fehlermeldung!!

    Weisst du warum?

    danke Bench



  • Mit Delete bekomme ich keine Fehlermeldung. 🙄

    for (int i=0; i<CheckListBox1->Items->Count; i++)
      {
        if (CheckListBox1->Checked[i])
         {
             CheckListBox1->Items->Delete(i);
         }
    
     }
    


  • Hallo,

    das ist keine property sondern eine Funktion.

    Gruß

    Alexander

    [Edit]Bezog sich auf die vor-vorherige Nachricht[/Edit]



  • upps so solls sein.

    for (int i=0; i<CheckListBox1->Items->Count; i++)
      {
        if (CheckListBox1->Checked[i])
         {
             CheckListBox1->Items->Delete(i--);
         }
    
     }
    


  • Hallo,

    beim Löschen würde ich empfehlen rückwärts zu iterieren.

    for (int i = CheckListBox1->Items->Count - 1; i >= 0; --i)
    

    Gruß

    Alexander



  • Alexander Kempf schrieb:

    Hallo,

    beim Löschen würde ich empfehlen rückwärts zu iterieren.

    for (int i = CheckListBox1->Items->Count - 1; i >= 0; --i)
    

    Gruß

    Alexander

    Ist aber bei dieser Gegebenheit nicht umbedingt erforderlich.



  • zwitch schrieb:

    Ist aber bei dieser Gegebenheit nicht umbedingt erforderlich.

    Was ist schon unbedingt erforderlich?
    Aber bevor es philosophisch wird...
    Für mich ist ein Rückwärtsiterieren aus zwei Gründen empfehlenswert:

    1. Das ist gängige Praxis (soweit ich das überschauen kann).
    2. Man sollte nicht innerhalb einer for-Schleife den Schleifenparameter verändern.
    Das führt zu schlechterer Lesbarkeit und damit zu Verwirrungen und letztlich möglicherweise Fehlern.

    Natürlich ist das hier sehr überschaubar, aber:

    1. Der Code kann noch wachsen.
    2. Der Mensch ist ein Gewohnheitstier...

    Gruß

    Alexander



  • Hi,

    ok jetzt gehts.
    Habe statt Delete(i--) Delete[i] gehabt!
    da hat er wegen der klammer gamault!!!

    Ich danke Bench



  • Alexander Kempf schrieb:

    beim Löschen würde ich empfehlen rückwärts zu iterieren.

    Dem möchte ich mich anschließen...

    Bench_XProjects schrieb:

    Habe statt Delete(i--) Delete[i] gehabt!
    da hat er wegen der klammer gamault!!!

    Aber auch nur wegen der Klammer. Das i-- ist ein post-operator, das heißt i wird erst nach Abschluß der Funktion dekrementiert.


Anmelden zum Antworten