【问题标题】:ArgumentOutOfRangeException for ListViewItem when clicking 2nd time第二次单击时 ListViewItem 的 ArgumentOutOfRangeException
【发布时间】:2015-04-03 23:51:53
【问题描述】:

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

第一次点击就可以了!?

ListView FullRowSelect 设置为真。

我看到在按下 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);
        }
    }

【问题讨论】:

    标签: c# listview selecteditem


    【解决方案1】:

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

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

     if (li.SelectedItems.Count == 0)
    

    当您按下除 Alt/Control 之外的任何按键时,什么都不会发生,因为您没有处理除这些按键之外的任何按键事件,

     Control.ModifierKeys == Keys.None
    

    意味着除了 Alt/Control 被按下之外,没有任何键被按下。

    【讨论】:

    • 你是对的。谢谢。我正在使用列表框并更改为 ListView 更改后我忘记更改 if 条件(您知道 ListBox 为 -1)我必须单击 2 次才能获取对话框问题?为什么?
    • 您的 MultipleToText 处理程序究竟订阅了什么事件?
    • @kyriacoss 鼠标点击事件
    • 我在这里找到了解决方案stackoverflow.com/questions/7089235/…
    猜你喜欢
    • 2016-02-01
    • 1970-01-01
    • 2015-06-03
    • 2012-08-20
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    相关资源
    最近更新 更多