2013-04-06 37 views
3

我在Delphi 7中有一個字符串網格,其中有0..N行。如果用戶單擊列表框中的任意數字,則列表框中的數字爲0..N ,則應在字符串網格上選擇該行數。以編程方式突出顯示一個stringgrid行

,所以我有這個

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 

as grids.pas

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

(ARow >= RowCount)是真的如此錯誤

如何選擇最後一排?

+1

關閉一個或柵欄柱的錯誤,因爲我們給他們打電話,是PEBKAC問題。鍵盤和椅子之間存在問題。 I.E.,你的人腦是一個人而不是電腦。 – 2013-04-06 13:14:00

回答

4

如果有3行,然後他們被稱爲

0, 1, 2. 

注意,沒有行稱爲3

更一般地,如果有N行,然後他們被稱爲

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

注意,沒有行稱爲N

因此,你的問題已經可以對你的問題的第一線發現:

我[原文如此!]在德爾福7串網格,N行。沒有與 數字的列表框從0..N

如果有N行,則列表框應包含數字0..N-1。事實上,如果讓它包含數字0..N,那麼列表框中的行數將等於N+1,即比字符串網格中的項目數量多一個。

另外:我會做簡單的

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

選擇與指數3行,假設列數爲4+1

+0

(我改變了0..n的問題)確定這是正確的:) ..但事情是,如果我在列表框中選擇1 ..第一行被選中。列表框和網格具有相同的行數。唯一的問題是對於最後一行,當我點擊列表框的最後一行時,網格索引超出範圍錯誤出現grids.pas引發錯誤 – psqluser 2013-04-06 13:19:25

+0

@psqluser:您的選擇代碼也很奇怪。我只是簡單的'StringGrid1.Selection:= TGridRect(Rect(0,3,4,3))'來選擇索引爲'3'的行,假設列數爲'4 + 1'。 – 2013-04-06 13:27:23

相關問題