Ich habe ein TStringGrid, und ich möchte die ausgewählte Zeile löschen. Grundlegende Dinge, die ich versucht habe, löschen nur die letzte Reihe. Wie lösche ich eine beliebige Zeile?Wie lösche ich eine TStringGrid-Zeile?
Antwort
Wenn der Code, den Sie nur versucht haben, die letzte Zeile löscht, dann sind Sie wahrscheinlich nur Erniedrigen der RowCount
Eigentum. Das macht in der Tat immer seine Änderungen an der Ende der Liste der Zeilen. In diesem Sinne könnten Sie Code schreiben, um sicherzustellen, dass die Zeile, die Sie nicht mehr wollen, die am Ende ist, und dann löschen Sie die letzte Zeile. (Der direkteste Weg wäre, bewegen die Reihe, und es gibt eine MoveRow
Methode, aber es ist geschützt. Wenn Sie es wünschen geschützten Methoden nennen, aber man kann auch nur call DeleteRow
statt.)
Mit nur öffentlich und veröffentlichte Mitglieder, ist es möglich, eine Schleife zu schreiben, die eine beliebige Zeile löscht. Zum Beispiel, hier ist ein Code, inspiriert von Scalabium Software's FAQ on this topic:
procedure DeleteRow(Grid: TStringGrid; ARow: Integer);
var
i: Integer;
begin
for i := ARow to Grid.RowCount - 2 do
Grid.Rows[i].Assign(Grid.Rows[i + 1]);
Grid.RowCount := Grid.RowCount - 1;
end;
Es kopiert den Inhalt jeder Zeile unter diejenige, die Sie wünschen oben in die Zeile zu löschen. Am Ende der Schleife wurde die Zeile, die Sie löschen möchten, überschrieben (in der Zeile unmittelbar darunter) und es gibt zwei Kopien der letzten Zeile. Dann löscht es einfach die letzte Zeile.
Um die aktuelle Zeile des Gitters, rufen Sie die Funktion wie folgt zu löschen:
DeleteRow(Grid, Grid.Row);
Die ausgewählte Zeile des Rasters wird durch die Eigenschaft angegeben.
TCustomGrid
hat eine DeleteRow
Methode, aber es ist geschützt, so dass Sie es nur innerhalb von Nachkommen dieser Klasse aufrufen können. Es ist jedoch leicht, diese Einschränkung zu umgehen. Deklarieren Sie einen Nachkommen TCustomGrid
, und geben Sie dann Ihr Gittersteuerelement auf diesen neuen Typ ein. Rufen Sie DeleteRow
auf das Ergebnis. Diese
type
TCustomGridAccess = class(TCustomGrid) end;
procedure DeleteGridRow(g: TCustomGrid; row: Integer);
begin
TCustomGridAccess(g).DeleteRow(row);
end;
funktioniert, weil in Delphi, die Mitglieder mit geschützter Sichtbarkeit sind implizit öffentliche innerhalb derselben Einheit wie die Erklärung der Klasse. Obwohl TCustomGrid
in der Grids Einheit deklariert wird, unsere TCustomGridAccess
Klasse wird in Ihre Einheit deklariert, so dass Ihr Gerät Zugriff auf alle geschützten Methoden, darunter DeleteRow
.
Wenn Ihr Delphi-Version neu genug ist, dann können Sie eine Klasse Helfer verwenden. Klassenhelfer können auf geschützte Elemente zugreifen und benötigen kein Typcasting für technisch nicht verwandte Typen.
type
TCustomGridHelper = class helper for TCustomGrid
public
procedure DelRow(ARow: Integer);
end;
procedure TCustomGridHelper.DelRow(ARow: Integer);
begin
Self.DeleteRow(ARow);
end;
Dann verwenden Sie einfach die Einheit, wo Sie den Helfer erklärt haben. Jeder Nachkomme von TCustomGrid
wird automatisch eine DelRow
Methode, die Sie wie jede andere Gitterverfahren anrufen:
grid.DelRow(grid.Row);
- 1. Wie lösche ich eine Zeichenfolge?
- 2. Wie lösche ich eine Prozessbefehlszeile?
- 3. Wie lösche ich eine Flaschensitzung?
- 4. Wie lösche ich eine schreibgeschützte Datei?
- 5. Wie lösche ich eine Datei mit VB.NET?
- 6. Wie lösche ich eine JList in Java?
- 7. Wie lösche ich eine Datenbank aus Firebase?
- 8. Wie lösche ich eine Bash-Funktion?
- 9. Wie lösche ich eine Datei in sailsjs?
- 10. Wie lösche ich eine Log-Datei programmatisch?
- 11. Wie lösche ich eine Parkettdatei auf Spark?
- 12. Wie lösche ich eine persistente Abfragezeichenfolge
- 13. Wie lösche ich eine bestimmte Zeile?
- 14. Wie lösche ich eine Tabelle in SQLAlchemy?
- 15. Wie lösche ich eine Sammlung in MongoDB?
- 16. Wie lösche ich eine PHP-Sitzung?
- 17. Wie lösche ich JTextArea?
- 18. Wie lösche ich THREE.JS Szene
- 19. Wie lösche ich eine fehlerhafte Festschreibung, während ich später festhalte?
- 20. Wie lösche ich mehrere Zeilen?
- 21. Wie lösche ich einen Verfügbarkeitssatz?
- 22. Wie lösche ich den Standardkonstruktor?
- 23. Wie lösche ich einen Cookie?
- 24. Wie lösche ich einen Edelsteinpfad?
- 25. Wie lösche ich Dateien programmatisch?
- 26. Wie lösche ich den Navigationsstapel?
- 27. Wie lösche ich wirklich Vektoren
- 28. Wie lösche ich ein Wörterbuch?
- 29. Wie lösche ich einen Kontakt?
- 30. Koolwired.Imap - Wie lösche ich Nachrichten?
hinzuzufügen, wenn Sie Objekte benötigen (wie ich, dynamisch Daten in Zellen aus dem Objekt anstelle von Zellinhalten Zeichnung) , dann ersetzen Sie die zweite Zeile durch 'Grid.Objects [0, I]: = Grid.Objects [0, I + 1];'. Dies ist ein bisschen schneller, als den gesamten Inhalt zu ersetzen, der nicht einmal benutzt wird. –