我已经阅读了几个小时的SO帖子,并尝试了不同的操作(例如刷新和设置为null等),这就是我的工作重点。
我有一个人类类,并有多个人类分支继承它。像儿童,成人,少年一样。它们都具有“名称”,“年龄”,“生日”属性,诸如此类。
所以我有两个列表,分别代表现在和过去的人类:
BindingList<Human> presentBind
BindingList<Human> pastBind
和两个列表框:
viewHumansBox
removeHumansBox
我创建了一种使用这些数据源初始化ListBoxes的方法。在Form1()中的InitializeComponent之后调用它:
private void Show()
{
viewHumansBox.DataSource = null;
viewHumansBox.DataSource = presentBind;
removeHumansBox.DataSource = null;
removeHumansBox.DataSource = presentBind;
}
因此,表单中的一个面板将新人类添加到viewHumansBox并通过.Add通过Add按钮将removeHumansBox移除。这样就可以很好地工作,并且人员可以填充列表(我在ToString()上进行了覆盖,因此它只在ListBoxes中显示其名称,而其他统计信息则在选中时显示在标签旁边)。
我有一个消除人的小组。它显示一个ListBox和一个Remove按钮。如您在此处看到的,removeHumansBox由presentBind填充。当您在ListBox中选择一个Human并按remove时,ListBox应该会自动更新,并且Human应该从viewHumansBox和removeHumansBox中消失。
我无法更新它,或者可能无法正确删除。现在我刚刚尝试过:
private void removeButton_Click(object sender, EventArgs e) {
if (removeHumansBox.Items.Count >= 1)
{
if (removeHumansBox.SelectedValue != null)
{
var items = (BindingList<Human>)removeHumansBox.DataSource;
var item = (Human)removeHumansBox.SelectedValue;
removeHumansBox.DataSource = null;
removeHumansBox.Items.Clear();
items.Remove(item);
removeHumansBox.DataSource = items;
}
}
else
{
System.Windows.Forms.MessageBox.Show("None");
}
}
我也尝试过刷新和更新,因此,肯定是我做错了什么。已经好几个小时了,我真的可以帮忙。
当我选择一个项目并单击“删除”按钮时,ListBox完全保持不变。