所以我的程序中有一个列表框,我希望用户能够通过访问其上下文菜单并单击“删除”来删除其中的特定项目。如果我按顺序删除它的项目(从顶部项目到最后一项),一切似乎都工作正常。但是,当我不按顺序删除项目时,我收到调试错误。我想知道如何删除我选择的项目。
这是用户右键单击列表框中的项目后将执行的代码:
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”类型异常 附加信息:索引超出了数组的范围。
答案 0 :(得分:3)
listBox.SelectedIndex
返回所选项目的集合。由于用户只选择一个项目,因此该集合只有一个索引为0的项目。尝试删除具有非零索引的项目将导致错误。请改用listBox.Items.RemoveAt(index)
:
private void deleteToolStripMenuItem1_Click(object sender, EventArgs e)
{
listBox.Items.RemoveAt(index);
}