首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎么判断事件是否已订阅某一方法

2012-07-03 
如何判断事件是否已订阅某一方法请问如何判断事件是否已订阅某一方法例如:button2.Click + new EventHand

如何判断事件是否已订阅某一方法
请问如何判断事件是否已订阅某一方法
例如:
button2.Click += new EventHandler(button2_Click);
这样判断button2的Click事件是否已订阅button2_Click这个事件处理方法

[解决办法]
用反射

C# code
ropertyInfo pi = (typeof(System.Windows.Forms.Button)).GetProperty("Events",                 BindingFlags.Instance | BindingFlags.NonPublic);EventHandlerList ehl = (EventHandlerList)pi.GetValue(yourbutton, null);//这是你的ButtonFieldInfo fi = (typeof(Control)).GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);Delegate d = ehl[fi.GetValue(null)];if (d != null){    System.Delegate[] dels = d.GetInvocationList();    for (int i = 0; i < dels.Length; i++)    {        Console.WriteLine(dels[i].Method.Name);//这里会输出所有方法名称    } }
[解决办法]
我觉得没有特别的需求情况下没必要知道所有的方法吧??
你只要在加事件之前先-=就好了
button2.Click -= new EventHandler(button2_Click); 
button2.Click += new EventHandler(button2_Click);
[解决办法]
C# code
 Delegate[] delDirectory = button2.Click.GetInvocationList();            if (delDirectory != null && delDirectory.Length > 0)            {                foreach (EventHandle handle in delDirectory)                {                    if (handle == button2_Click)                    {                        //已注册                    }                    else                    {                        //未注册                    }                }            }            else            {                //未注册            }
[解决办法]
简单点话 注册事件 先移除 然后在注册
 或者可以到事件列表里面去判断是否存在该事件 例如 Zine_Alone 所说的

热点排行