Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Stringgrid ausgewählte Zeile löschen
arminho - Di 08.03.05 21:27
Titel: Stringgrid ausgewählte Zeile löschen
hallo habe ein stringgrid..und ich will die aktuell ausgewählte zeile löschen, alle zeilen drunter sollen natürlich um eine nach oben verschoben werden.
habs mal so versucht aber da kommt eine fehlermeldung: Gitterindex außerhalb des zulässigen bereichs... k.A.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Zeilelschen1Click(Sender: TObject); var n:word; begin with stringgrid1 do begin row:=stringgrid1.rowcount; if row<rowcount-1 then for n:=stringgrid1.rowcount to rowcount-2 do rows[n]:=rows[n+1];
rowcount:=rowcount-1; end; end; |
arminho - Di 08.03.05 21:34
hab mir alles mögliche angeschaut in der suche aber ich packs einfach nicht...
Tino - Di 08.03.05 21:52
Versuch es mal mit diesem Sourcecode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure GridDelRow (aRowNumber : Integer; aGrid : TStringGrid); var Loop : Integer; begin aGrid.Row := aRowNumber; if (aGrid.Row = aGrid.RowCount -1) then aGrid.RowCount := aGrid.RowCount - 1 else begin for Loop := aRowNumber To aGrid.RowCount - 1 do aGrid.Rows[Loop] := aGrid.Rows[Loop + 1]; aGrid.RowCount := aGrid.RowCount - 1; end; end; |
arminho - Di 08.03.05 22:13
funzt leider nicht..... Zugriffsverletzung ...
Delete - Di 08.03.05 22:17
Wo kommt da eine Zugriffsverletzung? Ist dein Index zu hoch gewählt? Beschreib das mal genauer.
arminho - Di 08.03.05 22:20
wenn ich den code bei meinem mainmenü fürs löschen einfüge und zur Laufzeit dann auf das Menü drücke...kommt ne fehlermeldung "Zugriffsverletzung" und das Programm hängt.
Tino - Di 08.03.05 22:39
Setze mal einen Breakpoint [F5] auf die erste auführbare Zeile (in meinem Beispiel oben die Zeile 5) und gehe dann Schritt für Schritt [F8] deinen Code durch und prüfe wo der Fehler erscheint.
arminho - Di 08.03.05 22:43
wann wird denn deine procedur ausgeführt?
procedure GridDelRow (aRowNumber : Integer; aGrid : TStringGrid);
wie muss ich denn das jetzt verändern... habs gemacht geht aber wie gesagt nicht.
schon ganz am anfang wird der fehler angezeigt...ich habs jetzt so stehen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.Zeilelschen1Click(Sender: TObject); var Loop : Integer; aRowNumber : Integer; aGrid : TStringGrid; begin aGrid.Row := aRowNumber; if (aGrid.Row = aGrid.RowCount -1) then aGrid.RowCount := aGrid.RowCount - 1 else begin for Loop := aRowNumber To aGrid.RowCount - 1 do aGrid.Rows[Loop] := aGrid.Rows[Loop + 1]; aGrid.RowCount := aGrid.RowCount - 1; end; end; |
Delete - Di 08.03.05 23:00
kein Wunder:
du musst die Prozedur genauso wie Tino sie gepostet hat bei dir im Quelltext einfügen, unterhalb von implementation und dort wo du sie aufrufen willst schreibst du:
Delphi-Quelltext
1:
| GridDelRow(1,StringGrid1); |
arminho - Di 08.03.05 23:05
jetzt löscht er aber immer die oberste zeile...er soll aber die, die ausgewählt ist löschen!
Tino - Mi 09.03.05 12:26
Du solltest dir auch ein bisschen den Sourcecode anschauen und versuchen zu verstehen.
Die Procedure, GridDelRow, die ich dir gepostet habe erwartet zwei Parameter: aRowNumber und aGrid. aRowNumber gibt an welche Zeile gelöscht werden soll und aGrid gibt das Grid an in wechlem die Zeile gelöscht werde soll.
Wenn Du also die Funktion GridDelRow so aufrufst wie in den Beispiel von OneOfTen dann ist es doch klar das immer die erste Zeile gelöscht wird da der erste Parameter eine 1 ist.
Du musst also statt der 1 dort die aktuelle Zeile des Grids angeben. Wie du die aktuelle Zeile des Grid bekommst erfährst du in der Delphi Hilfe unter TStringGrid -> Eigenschaften.
Gruß
Tino
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!