Frage zur FAQ (StringGrid leeren)
-
Hallo,
da ich ein braver Junge bin, habe ich zunächst in der FAQ nachgeschaut :D. Ich suchte nämlich eine Lösung mein StringGrid zu leeren. Dort habe ich etwa diesen Code gefunden:for (int i = 0; i < grid->RowCount; i++) for (int j = 0; j < grid->ColCount; j++) grid->Cells[i][j] = ""; grid->RowCount = 20; grid->ColCount=8; grid->FixedRows=1;
Nun ist mein Problem, dass dies nicht funktioniert. Die schon beschriebenen Zellen werden nicht wieder geleert. Ich habe einfach mal zum Test das hier geschrieben:
grid->Cells[i][j] = "Test";
Nun wurden zwar in alle Zellen "Test" geschrieben, doch die schon vollen wurden einfach übergangen!
Was mache ich falsch?
Vielen Dank
lg, freakC++
-
Hallo FreakC,
ein StringGrid darfst Du nur leeren, wenn auch die
gelöschten Zeilen bereits angezeigt werden.In Deinem Code löscht Du Anzahl Spalten und Zeilen und
erst danach setzt Du mit RowCount usw. das Grid neu auf.Korrekt und einfacher geht es so:
Integer iAnz; Grid->RowCount=10; Grid->ColCount=5; Grid->FixedCol=1; //...usw. //... sonstiger Code iAnz=Grid->RowCount; for(int i1=Grid->FixedCol;i1<iAnz;i1++) { Grid->Rows[i1]->Clear(); }
Ich setze in StringGrids generell nur Spalte 1 und zeichne dann
den Inhalt der Zeilen im OwnerDraw. Vorteil: Bei größeren StringGrids
wesentlich schneller als alle Zellen einzeln zu beschreibenGruss Stefan
-
Hallo Stefan7124,
das verstehe ich noch nicht so ganz. Ich habe ein großes StringGrid und da steht schon was drin. Nun wird es neu beschrieben und mit meinen Code sollten doch alle Zellen überschrieben werden. Danach wird nun das leere StringGrid mit einem neuen Format angezeigt.Warum darf ich das nicht machen???
Vielen Dank
lg, freakC++
-
freakC++ schrieb:
for (int i = 0; i < grid->RowCount; i++) for (int j = 0; j < grid->ColCount; j++) grid->Cells[i][j] = "";
Tausche in Cells die Variablen oder in den Schleifen RowCount/ColCount tauschen.
mfg
kpeter
-
Hallo FreakC
in Deinem Beispielcode fragst Du doch in Deinen
Schleifen mit den Parametern RowCount und ColCount
die Anzahl der Spalten und Felder ab. Danach setzt
Du das RowCount auf 20 und ColCount auf 8. Wenn jetzt aber
vor Deinen Schleifen das RowCount z.B. nur auf 10 steht,
dann löscht Du auch nur die Zellen bis Zeile 10. Hattest
Du aber vorher schon mal das RowCount z.B. auf 30, dann werden
diese weiteren bereits mal vorhanden 20 Zeilen nicht bearbeitet.Den Satz verstehe ich leider nicht:
Danach wird nun das leere StringGrid mit einem neuen Format angezeigt.Gruss Stefan
-
Hallo
Wenn du i und j beim []-Operator vertauscht, funktioniert es.
for (int i = 0; i < grid->RowCount; i++) for (int j = 0; j < grid->ColCount; j++) grid->Cells[j][i] = "";
Die Zeilen danach haben mit dem Leeren nichts mehr zu tun.
Ich werde auch gleich mal den FAQ-Eintrag überprüfen.bis bald
akari
-
akari schrieb:
Wenn du i und j beim []-Operator vertauscht, funktioniert es.
Ist das nun wesentlich anders als in meinem Posting?
Ich meine mal nur...
-
Hallo
@ kpeter : Ich habe deinen Post wohl nur überflogen, tut mir leid.
bis bald
akari
-
Hallo Stefan7124, kpeter, akari,
vielen Dank für eure Antworten. Ich habe einfach die Variablen getauscht und es funktioniert. Das die Lösung so einfach ist, habe ich nicht gedacht, aber ich bin ja ehrlich und habe einfach die FAQ kopiert und habe einfach mal vertraut, dass diese fehlerfrei ist...tja ist vielleicht doch ganz gut, wenn man sie mal wieder ausprobiert
bis dann
lg, freakC++