Delphi中的TStringGrid多选,确定已选择的行

3
有没有办法确定多选的TStringGrid或者TCustomGrid哪些行当前被选中了,最好是有一个属性可以获取。我知道在DrawCell事件中有gdSelected属性可以设置。
procedure DrawCell(ACol, ARow: Longint; ARect: TRect; AState: TGridDrawState);

我可以检查AStategdSelected,并在某个数组中跟踪这个信息,但这似乎很笨拙。
3个回答

4

我猜你说的是一个区域选择字符串网格,也就是一个在Options中带有goRangeSelect选项的字符串网格。然后你可以使用Selection属性。这实质上是一个TRect,它可以找到区域选择中左上角和右下角的单元格。


1
我认为这不会起作用,所选行不一定是连续的。 - sse
2
@user746911:不,我假设没有“扩展选择”(如Ctrl单击各个单元格)。然而,似乎TStringGrid不支持扩展选择。(如果它支持--你怎么启用它?!) - Andreas Rejbrand
据我所知,@Andreas 是正确的。标准的TStringGrid不支持非连续选择。然而,TDBGrid通过保持选定行的书签列表 (TDBGrid.SelectedRows属性)来支持非连续选择。 - Ken White
啊,我明白了,你们两个都是对的,谢谢。TStringGrid.selection.bottom和TStringGrid.selection.top对此非常有效。再次感谢你们。 - sse

1
哦,我使用StringGrid.Selection.BottomRight.Y来确定行,StringGrid.Selection.BottomRight.X来确定列。

0

使用字符串网格选择属性StringGrid.Selection.top将为您提供顶部选定行,StringGrid.Selection.bottom将为您提供结束选定行,即选择停止的位置。

示例:

如果您在字符串网格中从第3行到第6行进行选择,则StringGrid.Selection.top将输出3作为输出值,StringGrid.Selection.bottom将输出6作为输出值,您可以通过从顶部到底部迭代来获取其余值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接