我有一个列表框和一个复选框(全选),在我正在调用的代码listbox.items.clear()
中,现在我想订阅这个事件,所以每当我的列表框变得清晰时,selectAll 复选框也应该处于取消选中状态。
目前我在我的列表框 SelectedIndexChanged 事件中处理这个,我在我的列表框事件列表中找不到 ItemsClear 类型的事件。
我真的很想使用事件处理取消选中我的复选框。
这听起来像是一次往返。当您调用您的Clear
方法时,您知道您正在代码中清除它。在代码中反应,不需要往返。
例如,创建一个清除列表框的辅助方法,然后在清除列表框后执行您想要的代码。
你是对的,这没有任何事件。但是为什么要这么复杂呢?给自己定义一个方法,比如
private void ClearAndUncheck(){
listbox.Items.Clear();
selectAll.Checked = false;
}
据我所知,没有任何事件是直接因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并绑定ListBox
到,如果您的场景允许的话。这种方法可能会给你一些新的想法。
BindingList<string> myList;
myList = new BindingList<string>(...);
listBox1.DataSource = myList;
myList.ListChanged += new ListChangedEventHandler(myList_ListChanged);
然后,通过使用ListChanged
BindingList 的事件(以及许多其他事件),当您的 ListBox 被清除时,您可以对“全选”复选框进行操作ListBox1.Items.Clear().
void myList_ListChanged(object sender, ListChangedEventArgs e)
{
if (e.ListChangedType == ListChangedType.Reset)
{
... // Do what you need here
}
}