4

我在 Delphi 7 中有一个字符串网格,有 0..N 行。如果用户单击列表框编号中的任意数字,则列表框的编号为 0..N,则应在字符串网格上选择该行号。

所以我有这个

   MystringGrid.Col :=0;
   MystringGrid.Row :=Listbox.itemindex;
   MystringGrid.Selection:=TGridRect(Rect(0,1 ,1 ,1));
   MystringGrid.SetFocus;

这将很好地选择网格上的行(突出显示它)但问题是如果

 listbox.itemindex=MystringGrid.rowcount;

那个时候我得到

 Grid Index out of range error 

如grids.pas

 if (ACol < 0) or (ARow < 0) or (ACol >= ColCount) or (ARow >= RowCount) then
  InvalidOp(SIndexOutOfRange)

(ARow >= RowCount)是真的,所以错误

我如何选择最后一行?

4

1 回答 1

7

如果有3行,则调用它们

0,  1,  2.

请注意,没有名为 的行3

更一般地说,如果有N行,那么它们被称为

0,  1,  2, ..., N - 1.

请注意,没有名为 的行N

因此,您的问题已经在问题的第一行中找到:

我 [原文如此!] 在 Delphi 7 中有一个字符串网格,有 N 行。有一个列表框,其编号为 0..N

如果有N行,则列表框应包含数字0..N-1。事实上,如果你让它包含数字0..N,那么列表框中的行数将等于N+1,即比字符串网格中的项目数多一。

另外:我会做的简单

StringGrid1.Selection := TGridRect(Rect(0, 3, 4, 3))

选择具有索引的行3,假设列数是4+1

于 2013-04-06T13:06:34.903 回答