比如一个button1,有如下的委托事件
button1.Click += new System.EventHandler(this.menuClick); private void menuClick(object sender, EventArgs e)
{
}怎么能根据事件"menuClick"获取到button1对象.
button1.Click += new System.EventHandler(this.menuClick); private void menuClick(object sender, EventArgs e)
{
}怎么能根据事件"menuClick"获取到button1对象.
{
}
public class StackFrame
Member of System.Diagnostics
没有写明白
另外还有若干个button也引用了这个委托,怎么在一个方法内,将这些引用的button找到,而不是在这个事件内找到.
foreach (Delegate delItem in Click.GetInvocationList())
{
delItem.Target
}
List<Button> GetMethodObject(string method)
{
List<Button> list = new List<Button>();
PropertyInfo pi = typeof(Component).GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo fi in this.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static))
{
if (fi.FieldType == typeof(Button))
{
Button btn = fi.GetValue(this) as Button;
EventHandlerList ehl = pi.GetValue(btn, null) as EventHandlerList;
object key = typeof(Control).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
Delegate del = ehl[key];
foreach (Delegate de in del.GetInvocationList())
if (de.Method.Name == method)
list.Add(btn);
}
}
return list;
}
{
List<Control> list = new List<Control>();
PropertyInfo pi = typeof(Component).GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo fi in this.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static))
{
if (fi.FieldType == typeof(Button))
{
Control btn = fi.GetValue(this) as Control;
EventHandlerList ehl = pi.GetValue(btn, null) as EventHandlerList;
object key = typeof(Control).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
Delegate del = ehl[key];
foreach (Delegate de in del.GetInvocationList())
if (de.Method.Name == method)
list.Add(btn);
}
}
return list;
}
=>
if (fi.FieldType == typeof(Control))
{
List<Control> list = new List<Control>();
PropertyInfo pi = typeof(Component).GetProperty("Events", BindingFlags.NonPublic | BindingFlags.Instance);
foreach (FieldInfo fi in this.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static))
{
if (fi.FieldType.IsSubclassOf(typeof(Control)))
{
Control ctl = fi.GetValue(this) as Control;
EventHandlerList ehl = pi.GetValue(ctl, null) as EventHandlerList;
object key = typeof(Control).GetField("EventClick", BindingFlags.NonPublic | BindingFlags.Static).GetValue(null);
Delegate del = ehl[key];
if (del != null)
{
foreach (Delegate de in del.GetInvocationList())
{
if (de.Method.Name == method)
list.Add(ctl);
}
}
}
}
return list;
}