这3个的委托怎么取消,谁帮我写下方法哦!

zgqtxwd 2013-12-25 11:28:30
private void button13_Click(object sender, EventArgs e)
{
button13.Click+=new EventHandler(delegate{MessageBox.Show("1");});

button13.Click+=new EventHandler(delegate{MessageBox.Show("1");});

button13.Click+=new EventHandler(delegate{MessageBox.Show("1");});

}

这3个的委托怎么全部取消,谁帮我写下方法哦!
...全文
227 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
luo18273197110 2013-12-30
  • 打赏
  • 举报
回复
引用 9 楼 zgqtxwd 的回复:
[quote=引用 8 楼 luo18273197110 的回复:] button13.Click = null
这样行吗?[/quote] 当然不行
  • 打赏
  • 举报
回复
-=就行啦,楼主
threenewbee 2013-12-26
  • 打赏
  • 举报
回复
引用 12 楼 zgqtxwd 的回复:
[quote=引用 10 楼 caozhy 的回复:] 1L你没看?
看了,有点深奥,特别是这段代码

PropertyInfo _PropertyInfo = p_Object.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
            if (_PropertyInfo != null)
            {
                object _EventList = _PropertyInfo.GetValue(p_Object, null);
                if (_EventList != null && _EventList is EventHandlerList)
                {
                    EventHandlerList _List = (EventHandlerList)_EventList;
                    FieldInfo _FieldInfo = p_EventType.GetField(p_EventName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
                    if (_FieldInfo == null) return null;
                    Delegate _ObjectDelegate = _List[_FieldInfo.GetValue(p_Object)];
                    if (_ObjectDelegate == null) return null;
                    return _ObjectDelegate.GetInvocationList();
                }
            }
            return null;
[/quote] 一个是反射,懂不懂?另一个涉及到WinForms的EventHandlerList机制,简单来说,因为对于控件来说,有大量的事件,为了减少存储提高性能,WinForms将它们全部存入一个列表,类似字典,这样绝大部分没有挂钩事件处理函数的事件就不要单独存储了。 实在不理解,你就当黑盒直接用吧。
zgqtxwd 2013-12-26
  • 打赏
  • 举报
回复
特别是这些句子,有点云里雾里的感觉 PropertyInfo object _EventList = _PropertyInfo.GetValue(p_Object, null); FieldInfo _FieldInfo = p_EventType.GetField( FieldInfo _FieldInfo = p_EventType.GetField( Delegate _ObjectDelegate = _List[_FieldInfo.GetValue(
zgqtxwd 2013-12-26
  • 打赏
  • 举报
回复
引用 10 楼 caozhy 的回复:
1L你没看?
看了,有点深奥,特别是这段代码

PropertyInfo _PropertyInfo = p_Object.GetType().GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic);
            if (_PropertyInfo != null)
            {
                object _EventList = _PropertyInfo.GetValue(p_Object, null);
                if (_EventList != null && _EventList is EventHandlerList)
                {
                    EventHandlerList _List = (EventHandlerList)_EventList;
                    FieldInfo _FieldInfo = p_EventType.GetField(p_EventName, BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.IgnoreCase);
                    if (_FieldInfo == null) return null;
                    Delegate _ObjectDelegate = _List[_FieldInfo.GetValue(p_Object)];
                    if (_ObjectDelegate == null) return null;
                    return _ObjectDelegate.GetInvocationList();
                }
            }
            return null;
xiaoyuan402 2013-12-26
  • 打赏
  • 举报
回复
引用 3 楼 zhantianyou 的回复:
button13.Click -= delegate{MessageBox.Show("1");};
+ 对应— 应该是可以。
zhantianyou 2013-12-26
  • 打赏
  • 举报
回复
button13.Click -= delegate{MessageBox.Show("1");};
BenBenBears 2013-12-26
  • 打赏
  • 举报
回复
楼上的回复足以结贴咯。试一下以下语句的效果: button13.Click-=new EventHandler(delegate{MessageBox.Show("1");});
欢乐的小猪 2013-12-26
  • 打赏
  • 举报
回复
引用 7 楼 zgqtxwd 的回复:
[quote=引用 5 楼 hbu_pig 的回复:] 你可以不用匿名委托
不用匿名委托怎么写,又如何批量取消?[/quote] 定义一个委托(事件是一种特殊的委托),然后就可以+=和-=的操作了。如下:
 EventHandler pro;
            pro = (sender, e) =>
            {
                //.......
            };
            button13.Click += pro;
如果要批量删除,可以像你现在这样用匿名委托。通过反射遍历找到它的所有事件,Remove掉
threenewbee 2013-12-26
  • 打赏
  • 举报
回复
1L你没看?
zgqtxwd 2013-12-26
  • 打赏
  • 举报
回复
引用 8 楼 luo18273197110 的回复:
button13.Click = null
这样行吗?
luo18273197110 2013-12-26
  • 打赏
  • 举报
回复
button13.Click = null
zgqtxwd 2013-12-26
  • 打赏
  • 举报
回复
引用 5 楼 hbu_pig 的回复:
你可以不用匿名委托
不用匿名委托怎么写,又如何批量取消?
小猪八Q 2013-12-26
  • 打赏
  • 举报
回复
引用 5 楼 hbu_pig 的回复:
你可以不用匿名委托
欢乐的小猪 2013-12-26
  • 打赏
  • 举报
回复
你可以不用匿名委托
threenewbee 2013-12-25
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390663596?page=1#post-396282834

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧