0

我在 winform 上有一个列表框控件,同样是单项选择模式或单项选择模式。我正在尝试从form_KeyDown事件中滚动它,如下所示

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

     }

 }

但它会抛出一个错误,如“ArgumentOutOfRangeException was unhandled” Invalid argument of value =23 is not valid for selection index.

如何摆脱?

4

3 回答 3

2

试试这个:

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

     }

 }

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

于 2012-05-13T19:16:07.483 回答
1

根据MSDN 的文档ListBox.SelectedIndex

当前选定项的从零开始的索引。如果未选择任何项目,则返回负一 (-1) 值。

所以,我相信你需要改变

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

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

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

因为如果列表框中有 23 项,则第 23 项实际上是第 22 项,第 1 项实际上是第 0 项,依此类推。

于 2012-05-13T19:17:53.947 回答
1

ListBox.SelectedIndex 是一个从零开始的数组,即索引中的第一项将为 0,而 Items.Count 将始终返回一个从 1 开始的值。

有关详细信息,请参阅以下内容:http: //msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selectedindex.aspx

亲切的问候,韦恩

于 2012-05-13T19:22:11.400 回答