单击第二次时ListViewItem的ArgumentOutOfRangeException

时间:2015-04-03 23:51:53

标签: c# listview selecteditem

当我第二次单击时,下面的方法给出了ArgumentOutOfRangeException错误,并且说索引0不是有效索引。

首次点击它有效!?

ListView FullRowSelect设置为true。

我在按ALT和CONTROL键时看到这种情况。如果我点击而没有按下那些键就没有错误,或者如果在点击第二次之前单击一个空行,则不会给出错误。

有没有办法使用这些组合键并点击一次以上?

    private void MultipleToText(object sender, MouseEventArgs e)
    {
        if (li.SelectedItems.Count <0)
            return;
        int SetIndex = li.FocusedItem.Index;
        if (Control.ModifierKeys == (Keys.Alt|Keys.Control))
        {
            ListViewItem lvi = li.SelectedItems[0];   // Error happens there 
            DialogResult res = MessageBox.Show( lvi.SubItems[0].Text + " will be deleted. Continue ?", "", MessageBoxButtons.YesNo);
            if (res == DialogResult.No)
                return;
            li.Items.Remove(li.SelectedItems[0]);
            RemoveThisItem(SetIndex);
        }
        else if (Control.ModifierKeys == Keys.None)
        {
            ListViewItem lvi = li.SelectedItems[0];
            DialogResult res = MessageBox.Show("Change the entry " +  lvi.SubItems[0].Text + " ?", "", MessageBoxButtons.YesNo);
            if (res == DialogResult.No)
                return;
            li.Items.Remove(li.SelectedItems[0]);
            for (int i = 0; i < 17; ++i)
                _textBox[i].Text = lvi.SubItems[i].Text;
            RemoveThisItem(SetIndex);
        }
    }

1 个答案:

答案 0 :(得分:1)

您收到错误,因为您的第一个if语句永远不会评估为true(并返回),因为count永远不会低于0.因此,即使您的列表为空,它仍然会尝试删除第一个元素,抛出一个ArgumentOutOfRangeException。

你的if语句应该检查它是否等于0,如下:

 if (li.SelectedItems.Count == 0)

当您按Alt / Control以外的任何内容时没有任何反应,因为您没有处理除此之外的任何按键操作的事件,

 Control.ModifierKeys == Keys.None

表示没有按下任何键,而不是按下Alt / Control之外的任何键。