0

我有一个列表框和一个复选框(全选),在我正在调用的代码listbox.items.clear()中,现在我想订阅这个事件,所以每当我的列表框变得清晰时,selectAll 复选框也应该处于取消选中状态。

目前我在我的列表框 SelectedIndexChanged 事件中处理这个,我在我的列表框事件列表中找不到 ItemsClear 类型的事件。

我真的很想使用事件处理取消选中我的复选框。

4

4 回答 4

4

这听起来像是一次往返。当您调用您的Clear方法时,您知道您正在代码中清除它。在代码中反应,不需要往返。

例如,创建一个清除列表框的辅助方法,然后在清除列表框后执行您想要的代码。

于 2013-04-24T08:10:24.420 回答
2

你是对的,这没有任何事件。但是为什么要这么复杂呢?给自己定义一个方法,比如

private void ClearAndUncheck(){
    listbox.Items.Clear();
    selectAll.Checked = false;
}
于 2013-04-24T08:10:16.417 回答
2

据我所知,没有任何事件是直接ListBox.Items.Clear被调用而引发的。您可以实现自己的行为:

public class CustomListBox : ListBox
{
    public event EventHandler ItemsCleared;

    public void ClearItems()
    {
        Items.Clear();
        if(this.ItemsCleared != null)
        {
            this.ItemsCleared(this, EventArgs.Empty);
        }
    }
}

只需在 Windows 窗体应用程序中声明上述类。而不是使用标准ListBox使用您的扩展CustomListBox并订阅ItemsCleared事件。

而不是CustomListBox.Items.Clear打电话CustomListBox.ClearItems

于 2013-04-24T08:12:05.343 回答
2

如果事件对您很重要,我建议使用BindingList并绑定ListBox到,如果您的场景允许的话。这种方法可能会给你一些新的想法。

BindingList<string> myList;

myList = new BindingList<string>(...);
listBox1.DataSource = myList;
myList.ListChanged += new ListChangedEventHandler(myList_ListChanged);

然后,通过使用ListChangedBindingList 的事件(以及许多其他事件),当您的 ListBox 被清除时,您可以对“全选”复选框进行操作ListBox1.Items.Clear().

void myList_ListChanged(object sender, ListChangedEventArgs e)
{
    if (e.ListChangedType == ListChangedType.Reset)
    {
        ... // Do what you need here
    }
}
于 2013-04-24T08:26:53.120 回答