以编程方式突出显示stringgrid行

psq*_*ser 4 delphi delphi-7 tstringgrid

我在Delphi 7中有一个字符串网格,具有0..N行。如果用户单击列表框编号中的任何数字,则存在一个列表框,其编号从0..N开始,应在stringgrid上选择该行号。

所以我有这个

   MystringGrid.Col :=0;
   MystringGrid.Row :=Listbox.itemindex;
   MystringGrid.Selection:=TGridRect(Rect(0,1 ,1 ,1));
   MystringGrid.SetFocus;
Run Code Online (Sandbox Code Playgroud)

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

 listbox.itemindex=MystringGrid.rowcount;
Run Code Online (Sandbox Code Playgroud)

那个时候我明白了

 Grid Index out of range error 
Run Code Online (Sandbox Code Playgroud)

如在grids.pas中

 if (ACol < 0) or (ARow < 0) or (ACol >= ColCount) or (ARow >= RowCount) then
  InvalidOp(SIndexOutOfRange)
Run Code Online (Sandbox Code Playgroud)

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

如何选择最后一行?

And*_*and 5

如果有3行,那么它们被称为

0,  1,  2.
Run Code Online (Sandbox Code Playgroud)

请注意,没有名为的行3

一般而言,如果有N行,则将其称为

0,  1,  2, ..., N - 1.
Run Code Online (Sandbox Code Playgroud)

请注意,没有名为的行N

因此,您的问题可以在问题的第一行找到:

我[原文如此!]在Delphi 7中有一个字符串网格,有N行。有一个数字从0..N开始的列表框

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

另外:我会简单地做

StringGrid1.Selection := TGridRect(Rect(0, 3, 4, 3))
Run Code Online (Sandbox Code Playgroud)

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