C# 要在listbox.items.clear()上执行代码

C# 要在listbox.items.clear()上执行代码,c#,.net,winforms,C#,.net,Winforms,我有一个列表框和一个复选框(全选),在我的代码中我正在调用listbox.items.clear(),现在我想订阅此事件,因此每当我的列表框被清除时,全选复选框也应该处于取消选中状态 目前我正在我的listbox SelectedIndexChanged事件中处理此问题,我在我的listbox事件列表中找不到ItemsClear类事件 我真的想使用事件处理取消选中我的复选框。你说得对,没有此事件。但为什么这么复杂呢?给自己定义一个方法,比如 private void ClearAndUnchec

我有一个列表框和一个复选框(全选),在我的代码中我正在调用
listbox.items.clear()
,现在我想订阅此事件,因此每当我的列表框被清除时,全选复选框也应该处于取消选中状态

目前我正在我的listbox SelectedIndexChanged事件中处理此问题,我在我的listbox事件列表中找不到ItemsClear类事件


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

你说得对,没有此事件。但为什么这么复杂呢?给自己定义一个方法,比如

private void ClearAndUncheck(){
    listbox.Items.Clear();
    selectAll.Checked = false;
}

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


例如,创建一个助手方法,清除列表框,然后在清除列表框后执行所需的代码。

据我所知,没有任何事件作为调用的
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

。这种方法可能会给你一些新的想法

BindingList<string> myList;

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

好主意,但我想这方面做得太过分了;)就我个人而言,我会考虑一种不同的方法,但是我会回应“我真的想用事件处理来取消我的复选框”。你可以选择items.count如果count=0,你可以做任何你想做的事情
void myList_ListChanged(object sender, ListChangedEventArgs e)
{
    if (e.ListChangedType == ListChangedType.Reset)
    {
        ... // Do what you need here
    }
}