我有一个TStringGrid,我想删除选定的行。我试过的基本功能只删除最后的行。如何删除任意行?如何删除TStringGrid行?
10
A
回答
11
如果你只尝试过的代码删除最后一排,那么你很可能只是递减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);
9
网格的选定行由其属性给出。
TCustomGrid
有一个DeleteRow
方法,但它是受保护的,所以除非从该类的后代中除外,否则不能调用它。尽管如此,很容易规避这种限制。声明一个TCustomGrid
后代,然后键入您的网格控件到该新类型。结果请致电DeleteRow
。
type
TCustomGridAccess = class(TCustomGrid) end;
procedure DeleteGridRow(g: TCustomGrid; row: Integer);
begin
TCustomGridAccess(g).DeleteRow(row);
end;
这工作,因为在Delphi中,用保护的可见成员都是隐含公共单位相同类的声明中。虽然TCustomGrid
在网格单元中声明,但我们的TCustomGridAccess
类别在单元中声明为单元,因此您的单元可以访问其所有受保护方法,包括DeleteRow
。
如果你的Delphi版本够新,那么你可以使用一个类帮手。类助手可以访问受保护的成员,并且不需要对技术上无关的类型进行类型转换。
type
TCustomGridHelper = class helper for TCustomGrid
public
procedure DelRow(ARow: Integer);
end;
procedure TCustomGridHelper.DelRow(ARow: Integer);
begin
Self.DeleteRow(ARow);
end;
然后,只需使用你声明助手的单位。的TCustomGrid
任何后代会自动有一个DelRow
方法,你可以调用就像任何其他的格法:
grid.DelRow(grid.Row);
相关问题
- 1. 如何在TStringGrid中显示行号?
- 2. 如何动态滚动TStringGrid?
- 3. 如何删除这些行
- 4. 如何用openpyxl删除行?
- 5. JQuerymobile如何删除行距
- 6. 如何删除GridBagLayout的行
- 7. MySQL - 删除一行,如何?
- 8. 如何删除该行?
- 9. 如何删除行解析
- 10. Css如何删除空行
- 11. 如何删除空白行?
- 12. 如何删除一行?
- 13. 如何删除此行表
- 14. 如何删除模式行
- 15. 如何删除行数据
- 16. 如何正确删除行?
- 17. 如何使用LiveBindings在TStringGrid中显示200多行?
- 18. 行删除后删除表
- 19. UISearchDisplayController删除行不删除
- 20. 如何删除删除mongodb中的条目时执行jquery ajax删除操作?
- 21. 如何从BiTemporal表中删除(物理删除)行
- 22. 如何删除行而不删除其_ID列值?
- 23. 如何使用php删除/删除mySQL中的特定表行?
- 24. 如何从选定的树视图中删除/删除行
- 25. GitHub上:删除本地分行如何删除GitHub的分支
- 26. 如何删除两个匹配的行,同时删除重复
- 27. 如何使用删除按钮删除表格行
- 28. 如何删除SQL中的行而不删除整个表
- 29. 如何删除键盘上的dataGridView行删除键按? c#
- 30. Excel删除行删除错误的行
要添加,如果你只需要对象(像我这样的,从对象,而不是单元格的内容在单元格动态绘图数据) ,然后用'Grid.Objects [0,I]:= Grid.Objects [0,I + 1];'替换第二行。这比替换甚至没有使用的全部内容要快得多。 – 2016-12-02 17:24:08