【问题标题】:C# Program crashes when removing item from ListBox从 ListBox 中删除项目时 C# 程序崩溃
【发布时间】:2015-04-06 22:25:53
【问题描述】:

我使用 BindingList 作为我的 ListBox 的数据源。

    public static BindingList<memo> memosList = new BindingList<memo>();

每当我尝试(通过按钮)移除选定对象时,我的程序都会崩溃。

    private void editMemo_Click(object sender, EventArgs e)
    {
        listBox1.Items.Remove(listBox1.SelectedItem);
    }

我收到以下错误:

“System.ArgumentException”类型的未处理异常发生在 System.Windows.Forms.dll

附加信息:当 DataSource 属性已设置。

我也试过用:

    private void editMemo_Click(object sender, EventArgs e)
    {
        Form2.memosList.Remove(listBox1.SelectedIndex);
    }

但是这不允许我编译。

如何在不引发异常的情况下删除项目?

【问题讨论】:

  • 您想将数据读入列表,然后将该列表绑定到列表框吗?现在您正尝试从列表框(和数据源)中删除。
  • 第二个,如果你指定一个索引,我想你想要RemoveAt

标签: c# winforms listbox


【解决方案1】:

您应该从绑定到列表数据源的 BindingList 中删除该项目

private void editMemo_Click(object sender, EventArgs e)
{
    if(listBox1.SelectedItem != null)
    {
        BindingList<memo> bl = listBox1.DataSource as BindingList<memo>;
        bl.Remove(listBox1.SelectedItem as memo) ;
    }
}

【讨论】:

  • 我有一个方法,当单击列表框中的一个项目时,它会在标签中显示整个对象;____________________________________________________________________________________private void listBox1_SelectedIndexChanged(object sender, EventArgs e) { memo memo = (memo)listBox1.SelectedItem; lblTitle.Text = memo.memoTitle.ToString(); lblPriority.Text = memo.memoPriority.ToString(); lblDescription.Text = memo.memoDescription.ToString();删除项目时这仍然会引发错误:S
  • codeshare.io/qH0ml 我已将那段代码添加到代码共享中,因此更易于阅读 xD 如果我删除代码以在标签中显示项目详细信息,它工作正常,但除此之外所有 3 .
  • 什么异常?空引用异常?当您删除一个项目时,选定的项目会被重置,并且可能会在没有任何 SelectedItem 的情况下引发 SelectedIndexChanged。添加if(!listBox.SelectedItem == null) { fill the labels with the selecteditem} else { clear the labels}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
相关资源
最近更新 更多