【发布时间】:2009-07-25 23:50:21
【问题描述】:
我有一个包含许多 ListBox 控件的应用程序。我想知道是否可以在列表框的构造函数中为 onselectedindexchanged 添加事件处理程序?所有列表框都将为此使用相同的方法。
我知道我可以手动添加它们,但我希望有一个解决方案可以改变我目前必须使用相同事件处理程序的所有事件处理程序,并且当我添加一个新事件处理程序时不必绑定到该方法。
【问题讨论】:
标签: c# class event-handling
我有一个包含许多 ListBox 控件的应用程序。我想知道是否可以在列表框的构造函数中为 onselectedindexchanged 添加事件处理程序?所有列表框都将为此使用相同的方法。
我知道我可以手动添加它们,但我希望有一个解决方案可以改变我目前必须使用相同事件处理程序的所有事件处理程序,并且当我添加一个新事件处理程序时不必绑定到该方法。
【问题讨论】:
标签: c# class event-handling
您可以简单地遍历控件吗?例如(在您的Form's / Control's ctor 中,在初始化之后):
CascadeListBoxEvent(this, MyHandlerMethod)
使用实用方法:
static void CascadeListBoxEvent(Control parent, EventHandler handler)
{
Queue<Control> queue = new Queue<Control>();
queue.Enqueue(parent);
while (queue.Count > 0)
{
Control c = queue.Dequeue();
ListBox lb = c as ListBox;
if (lb != null)
{
lb.SelectedIndexChanged += handler;
}
foreach (Control child in c.Controls)
{
queue.Enqueue(child);
}
}
}
【讨论】: