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
}
}