解决方法
如果您尝试的代码仅删除最后一行,那么您可能只是递减RowCount属性.这确实总是在行列表的末尾进行修改.考虑到这一点,您可以编写代码以确保不再需要的行是最后一行,然后删除最后一行. (最直接的方法是移动该行,并且有一个MoveRow方法,但是它是受保护的.如果你想调用保护方法,那么你也可以只改为
call
DeleteRow
)
仅使用公共和已发布的成员,可以编写一个删除任意行的循环.例如,这里有一些由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);