我有一个 TStringGrid,我想删除选定的行。我尝试过的基本操作仅删除最后一行。如何删除任意行?
最佳答案
如果您尝试的代码仅删除最后一行,那么您可能只是减少了 RowCount
属性。这确实总是在行列表的末尾进行修改。考虑到这一点,您可以编写代码来确保您不再需要的行是最后一行,然后删除最后一行。 (最直接的方法是移动行,有一个MoveRow
方法,但它是 protected 。不过,如果您想调用 protected 方法,您也可以只需 call DeleteRow
即可。)
仅使用公共(public)和已发布的成员,可以编写一个删除任意行的循环。例如,以下是一些受 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;
它将您想要删除的行下面的每一行内容复制到上面的行中。在循环结束时,您要删除的行已被覆盖(被紧接其下方的行覆盖),并且最后一行有两个副本。然后它只是删除最后一行。
要删除网格的当前行,请像这样调用函数:
DeleteRow(Grid, Grid.Row);
关于delphi - 如何删除 TStringGrid 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16351109/