【问题标题】:Deleting listbox's items using context menu c#使用上下文菜单C#删除列表框的项目
【发布时间】:2017-02-19 19:16:22
【问题描述】:

所以我的程序中有一个列表框,我希望用户能够通过访问其上下文菜单并单击删除来删除其中的特定项目。如果我按顺序删除它的项目(从顶部项目到最后一个项目),一切似乎都工作正常。但是,当我不按顺序删除项目时,会出现调试错误。我想知道如何才能删除我选择的项目。

这是用户右键单击列表框中的项目后将执行的代码:

public void listBox_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        index = listBox.IndexFromPoint(e.Location);
        {
            if (index == listBox.SelectedIndex)
            {
                contextMenuStrip1.Show(); 
            }
        }
    }
}

这是点击事件处理程序:

private void deleteToolStripMenuItem1_Click(object sender, EventArgs e)
{
    listBox.Items.Remove(listBox.SelectedItems[index]);
}

这是来自 IDE 的错误消息: System.Windows.Forms.dll 中出现“System.IndexOutOfRangeException”类型的未处理异常 附加信息:索引超出了数组的范围。

【问题讨论】:

  • 错误信息是什么
  • 你需要 ObservableCollection 吗?

标签: c# winforms listbox contextmenu


【解决方案1】:

listBox.SelectedIndex 返回所选项目的集合。由于用户只选择了一项,因此该集合只有一项索引为 0 的项。尝试删除索引非零的项将导致错误。请改用listBox.Items.RemoveAt(index):

private void deleteToolStripMenuItem1_Click(object sender, EventArgs e)
{
    listBox.Items.RemoveAt(index);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多