Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Zeilen im StringGrid löschen


sunday_2 - Fr 15.11.02 17:27
Titel: Zeilen im StringGrid löschen
Hi,

ist mir schon fast peinlich, aber wieso klappt das Löschen im StringGrid nicht. Habe folgendes eingegeben:

Quelltext
1:
2:
3:
for i:=1 to sg_auswahl.RowCount-1 do
          begin
            sg_auswahl.Rows.Delete(1)

Beim Löschen einer ComboBox funktioniert es ja auch mit.

Quelltext
1:
2:
for i:=0 to 26 do
           ComboBox_zahlen.Items.Delete(0);


(17.11.02 17:54 Tino) Titel geändert.


Keldorn - Fr 15.11.02 17:44

Hallo

überschreib besser den Zellinhalt

Mfg Frank


sunday_2 - Fr 15.11.02 18:02

Hi Kendorn

tolle Idee, :lol: nur leider brauch ich die Zeilen gelöscht. :(


Keldorn - Fr 15.11.02 18:05

wie meinst du mit gelöscht?

die vom ende, die in der mitte ?

ende: rowcount verkürzen
mitte: mit rows.assign die Zellen einzlen hochkopieren und zum schluß rowcount verkürzen

Frank


Ex0rzist - Sa 16.11.02 03:25

Hallo,

wenn du Code brauchst: --> hier [http://www.swissdelphicenter.ch/de/showcode.php?id=190].


sunday_2 - Mo 18.11.02 10:05

Das hilft leider alles noch nicht so richtig.
Also: Ich habe ein StrigGrid, das der User füllt (mal 3 Zeilen, mal 12 Zeilen usw.) Wenn der User festgestellt hat, das er Fehler gemacht hat, soll er mittels eines Reset-Buttons alle Zeilen löschen und neu starten können. Habe im augenblick folgenden Code:

Quelltext
1:
2:
3:
4:
5:
for i:=1 to sg_auswahl.RowCount-1 do
          begin
            sg_auswahl.Rows[i] := sg_auswahl.Rows[i + 1];
            sg_auswahl.RowCount := sg_auswahl.RowCount - 1;
            sg_auswahl.Repaint;

Die Zeilen werden dann auch anscheinend gelöscht, jedoch wenn ich eine neue Zeile hinzufüge, ist mindestens eine Zeile von den alten wieder da.


Keldorn - Mo 18.11.02 12:47

hallo

du hast das Beispiel nicht richtig verstanden:

Quelltext
1:
            sg_auswahl.RowCount := sg_auswahl.RowCount - 1;                    

innerhalb der einer For-schleife veränderst du das Ende, hast glück, das hier kein Laufzeitfehler entsteht

Quelltext
1:
            sg_auswahl.Repaint;                    

innerhalb der schleife das grid neuzeichen ist totaler quark und außerdem brauchst du es nicht überhaupt nicht neuzeichnen lassen

Sorry, hab nich so verstanden, daß du das ganze Grid löschen willst, das obengenannte Code-bsp ist dafür ausgelegt, eine bestimmte Zeile im Grid zu löschen.

das könnte dir weiterhelfen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
Var acol,arow:integer;
begin
  with sg_auswahl do
    begin
      //Zelleninhalt löschen
      for arow:=1 to rowcount-1 do
       for acol:=0 to colcount-1 do cells[acol,arow]:='';
      //anzahl der Zeilen neu setzen, 1 Zeile bleibt immer stehen, sonst entstehen Probleme mit fixedrows
      RowCount:= 2;
    end;
end;

Du mußt den Code evtl. ein wenig anpassen, wenn du fixedrows/-cols hast

mfg Frank


sunday_2 - Mo 18.11.02 13:13

Hab den Fehler gefunden. Muß heißen:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
for i:=1 to sg_auswahl.RowCount-1 do
      begin
          sg_auswahl.Rows[i].Clear;
      end;
          sg_auswahl.RowCount:=2;
          Zaehlwerk2:=1; 
          // Globale Variable, die beim Füllen hochgezählt wird.
          sg_auswahl.Repaint;


Trotzdem Danke
:lol: