我在winform上有一个列表框控件,同样是单项SelectionMode或一项选择模式。我正在尝试从 form_KeyDown 事件中滚动它,如下所示
if ((Keys)e.KeyCode == Keys.Down)
{
if (listBox2.Items.Count >= listBox2.SelectedIndex)
{
listBox2.SelectedIndex++;
}
}
但是它会抛出像“ArgumentOutOfRangeException未处理”的错误 无效的参数值= 23对选择索引无效。
如何摆脱?
答案 0 :(得分:2)
试试这个:
if ((Keys)e.KeyCode == Keys.Down)
{
if ((listBox2.Items.Count-1) > listBox2.SelectedIndex)
{
listBox2.SelectedIndex++;
}
}
请记住,如果您有23个项目,SelectedIndex
从0到22 ......
答案 1 :(得分:1)
根据ListBox.SelectedIndex
上的MSDN's documentation:
当前所选项目的从零开始索引。值为负数 如果没有选择任何项目,则返回一(-1)。
所以,我相信你需要改变
if (listBox2.Items.Count >= listBox2.SelectedIndex)
到
if (listBox2.Items.Count-1 > listBox2.SelectedIndex)
请将Marco的回答投票给他,因为他向我指出了这一点!
因为如果列表框中有23个项目,则项目23实际上是项目22,项目1实际上是项目0等等。
答案 2 :(得分:1)
ListBox.SelectedIndex是一个基于零的数组IE,第一个项目在索引中为0,而Items.Count将始终返回从1开始的值。
请参阅以下内容以获取更多信息: http://msdn.microsoft.com/en-us/library/system.windows.forms.listbox.selectedindex.aspx
亲切的问候,韦恩