0

私はwinformにリストボックスコントロールを持っています.Single Items SelectionModeまたはOne Items Selection Modeです。以下のようにform_KeyDownイベントからスクロールしようとしています

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

     }

 }

しかし、「ArgumentOutOfRangeException was unhandled」のようなエラーがスローされます。値 =23 の無効な引数は、選択インデックスに対して有効ではありません。

どうやって追い払う?

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 (-1) の値が返されます。

だから、私はあなたが変わる必要があると信じています

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

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

彼が私にこれを指摘したので、マルコの答えを正しいと投票してください!

リストボックスに 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 に答える