Frage zu ValueList



  • Hallo, ich habe eine Werteliste.
    Diese soll abhängig von der Wahl des Benutzers (dazu die ausgabe1Box)
    Werte in ASCII, HEX, Binär oder Dezimal anzeigen.
    Nun habe ich folgenden Code, um erstmal exemplarisch die Liste zu löschen:

    void __fastcall TLesenForm::ausgabe1BoxChange(TObject *Sender)
    {
        while (ValueListEditor1->RowCount>1){
            ValueListEditor1->DeleteRow(1);
        }
        switch (ausgabe1Box->ItemIndex){
            case 0: { ValueListEditor1->InsertRow("Byte Nr1","ASCII",false);
                      break;
                    }
            case 1: { ValueListEditor1->InsertRow("Byte Nr1","Hex",false);
                      break;
                    }
            case 2: { ValueListEditor1->InsertRow("Byte Nr1","Bin",false);
                      break;
                    }
            case 3: { ValueListEditor1->InsertRow("Byte Nr1","Dezimal",false);
                      break;
                    }
        }
    }
    

    Führe ich das Programm aus, kommt die Fehlermeldung:
    Blablabla: Listenindex überschreitet das Maximum(0);
    Dann dachte ich mir, dass das daran liegt, dass ich bei
    InsertRow die Zeile nicht anhänge, sondern überschreibe.
    Also hab ich den dritten Parameter auf true gesetzt,
    das hatte aber auch keinen Erfolg.
    Was ist falsch? Kann man das vielleicht eleganter lösen?
    Ich bin für jede Hilfe dankbar 😉



  • Raptor2000 schrieb:

    Dann dachte ich mir, dass das daran liegt, dass ich bei
    InsertRow die Zeile nicht anhänge, sondern überschreibe.

    Statt zu dachten hättest du mal den Debugger anwerfen sollen. 😉
    Dann wäre dir aufgefallen, dass der Fehler schon beim DeleteRow auftritt.
    Warum das so ist, das bekommst du doch jetzt selbst raus, oder?



  • @Jansen:
    Hi,
    hab auch erst das gedacht was du gechrieben hast...
    Aber eigentlicht, müsste es doch funktionieren:

    [cpp]while (ValueListEditor1->RowCount**>**1){
    ValueListEditor1->DeleteRow(1);
    }[/cpp]

    Die Schliefe wird solange ausgeführt, wie die Anzahl der Zeilen größer 1 ist (also 2 oder mehr). Ein DeleteRow(1); welches die 2. Zeile löscht müsste funktionieren.
    Hab gerade in der Hilfe nachgelesen, das DeleteRow(0) mit Titelziele nicht geht...

    MfG

    Alexander Sulfrian

    PS: Oder hab ich was übersehen?



  • Offensichtlich kann weder die letzte (leere) noch (falls vorhanden) die Überschriftszeile gelöscht werden.



  • Also,
    ein wenig schlauer bin ich schon 😉
    true und false steht natürlich nicht für das überschrieben,
    sondern gibt nur an, ob es vor, oder hinter die zeile geschrieben
    wird. Das bringt mich aber leider nicht weiter.
    Es muss doch möglich sein, die komplette Liste zu löschen.
    Borland kann echt nix! 😉 Naja, vielleicht (wahrscheinlich) liegt
    das Problem auch zwischen den Ohren.
    Die Überschriftleiste soll stehen bleiben.



  • Hi,
    geht doch eingentlich ganz einfach:

    ValueListEditor1->Strings->Clear();

    MfG

    Alexander Sulfrian



  • Danke Alexander,
    genau das ist es!!!
    Nu kann ich mich mit dem eigentlichen Problem auseinandersetzen 😉


Anmelden zum Antworten