2012-05-13 88 views
0

我有一个winform的列表框控件,同样是单个项目SelectionMode或一个项目选择模式。我试图从form_KeyDown事件滚动它下面选择索引列表框错误

if ((Keys)e.KeyCode == Keys.Down) 
{ 
    if (listBox2.Items.Count >= listBox2.SelectedIndex) 
    { 
      listBox2.SelectedIndex++; 

    } 

} 

但它抛出一个错误,如“ArgumentOutOfRangeException是未处理”的价值 无效参数= 23是无效的选择指标。

如何摆脱?

回答

2

试试这个:

if ((Keys)e.KeyCode == Keys.Down) 
{ 
    if ((listBox2.Items.Count-1) > listBox2.SelectedIndex) 
    { 
      listBox2.SelectedIndex++; 

    } 

} 

请记住,如果你有23个项目,SelectedIndex从0到22去...

1

MSDN's documentationListBox.SelectedIndex

一个零 - 基于当前选定项目的索引。如果未选择项目,则返回负值 one(-1)。

所以,我认为你需要改变

if (listBox2.Items.Count >= listBox2.SelectedIndex) 

if (listBox2.Items.Count-1 > listBox2.SelectedIndex) 

请投票Marco的答案是正确的,因为他指出了这一点给我!

因为如果在列表框23项,第23项实际上是第22项,第1项实际上是项0,等等等等

+1

如果' Count = 23'和'SelectedIndex = 22'(所以最后一个)你的if(...)将成立,你会得到相同的异常 – Marco

+0

@Marco Darn,我的逻辑很糟糕。 。 – smoth190