listbox einträge löschen



  • guten abend 🙂

    will von einer ListBox jeweils die Felder, die zusammengehören (DBGRid1->Columns->Count) in einen String zusammenfassen. Das Problem ist aber, dass er in diesem Fall nur die ersten 6 Einträge der ListBox nimmt und danach wieder von vorne anfängt. Logisch, weil ich ihm nicht gesagt habe, er soll auf den 7. Eintrag gehen und die Schleife von neuem durchlaufen.
    Deshalb meine Frage. Wie kann ich die bereits gebrauchten Einträge in der Listbox löschen? Bis jetzt haben meine Versuche mit einem Speicherzugriffsfehler geendet 😢

    AnsiString x = "";
    
          for(int i = 0; i < DBGrid1->DataSource->DataSet->RecordCount; i++){
    
            for(int w = 0; w  < DBGrid1->Columns->Count; w++){
    
             x = x + ListBox1->Items->Strings[w].c_str() + ';' + ' ';
    
             }
    
             Memo3->Lines->Add(x);
    
          }
    

    lg und danke hagbard



  • Ich bin mir nicht sicher, ob ich deine doch recht konfuse Beschreibung verstanden habe (auch nach rund 10maligem Durchlesen), aber wie wär's, wenn du auch mal die die aktuelle "Zeilennummer" mit einfliessen lassen würdest? Also

    ... Strings[w * (i + 1)] ...
    

    oder so ähnlich.

    Das c_str() hat da übrigens nix verloren.



  • Guten Morgen, mir ist die Angabe selbst beim Schreiben ein bisschen konfus vorgekommen, aber ich versuche jetzt mal, das anders zu erklären, was ich genau will.

    Also die listbox nimmt ihre einträge von einem DBGrid (Zelle für Zelle). ich habe dann zb 6 (Spalten) * 50 (Zeilen) (also 300) Einträge in der ListBox.
    Jetzt will ich das ganze Zeilenweise (also jeweils 6 Einträge) in das Memo laden (Semikolongetrennt).
    Das Problem ist, dass sich so nur die ersten 6 Items ständig wiederholen. Ich möchte aber nach der ersten Zeile auf Item 7 zugreifen. Danach auf 13 usw
    Ich hoffe, es ist so ein wenig verständlicher.

    lg Matthi



  • aja, dachte, dass das

    for(int i = 0; i < 2; i++){
    
            for(int w = 0; w  < DBGrid1->Columns->Count; w++){
    
             x = x + ListBox1->Items->Strings[w] + ';' + ' ';
             ListBox1->Items->Delete(w);
    
             }
    
             Memo3->Lines->Add(x);
    
          }
    

    funktionieren sollte, doch hier bekomme ich auch nur "sinnlose" Ergebnisse (nicht Zeile für Zeile).

    lg Matthi



  • Wie gesagt, du hast versäumt, die y-Achse mit einzubeziehen (den DBGrid-Inhalt mal als zweidimensionales Array betrachtet). Gelöscht werden muss dabei überhaupt nichts.
    Mit entsprechenden Variablennamen sollte das eher deutlich werden.

    int spalten = DBGrid1->Columns->Count;
    int zeilen = DBGrid1->DataSource->DataSet->RecordCount;
    
    for(int y = 0; y < zeilen; y++)  // für jede Zeile
    {
      String str = "";  
      for(int x = 0; x < spalten; x++)  // für jede Spalte
        str += ListBox1->Items->Strings[x + (y * spalten)] + "; ";
    
      Memo3->Lines->Add(str);
    }
    


  • vielen dank ... funkt erstens ausgezeichnet 🙂 und zweitens habe ich jetzt meinen fehler verstanden

    lg matthi


Anmelden zum Antworten