if(MouseClick!=null) 为何不能写

nandi_1 2014-08-20 08:40:46
我继承了一个Label,这么写可以通过:
if(myevent!=null)//myevent是自定义的EventHanler;
{
myevent(this,e);
}
但是用label自带的MouseEventHandler这么写:
if(MouseClick!=null) //这里出错,说MouseClick只能用于+=、-=
......

请教何故。
...全文
227 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
nandi_1 2014-08-28
  • 打赏
  • 举报
回复
谢谢各位的解答!
於黾 2014-08-26
  • 打赏
  • 举报
回复
事件和委托怎么能是一回事. 事件是通过委托实现的,但是事件是个函数,委托是委托,外部调用事件,是通过委托去调用函数. 此外,你在控件的类里写代码,和在外部调用代码,调用的东西不一样,用法当然也不一样.
nandi_1 2014-08-26
  • 打赏
  • 举报
回复
引用 2 楼 smthgdin 的回复:
1.你的myevent是事件还是委托? 2.mouseclick是事件,所以只能使用+=,+=来注册或者移除事件处理器;事件不能够从外部类触发,或者其他操作。 3.可能你的发出来代码不全。
myevent和mouseclick都是EventHandle,事件和委托不是一回事吗?
nandi_1 2014-08-26
  • 打赏
  • 举报
回复
学习了,原来事件还可以这么用
smthgdin_020 2014-08-21
  • 打赏
  • 举报
回复
1.你的myevent是事件还是委托? 2.mouseclick是事件,所以只能使用+=,+=来注册或者移除事件处理器;事件不能够从外部类触发,或者其他操作。 3.可能你的发出来代码不全。
phommy 2014-08-21
  • 打赏
  • 举报
回复
楼上的代码,new Control()处应该是this /kb foo方法中的部分,就是判断有没有MouseClick事件,有的话就触发
phommy 2014-08-21
  • 打赏
  • 举报
回复

        class MyClass : Label
        {
            void foo()
            {
                var del = getDelegateByControl(new Control(), "EventMouseClick");
                if (del != null)
                {
                    del.DynamicInvoke(this, new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0));
                }
            }

            /// <summary>
            /// 得到控件的事件绑定的委托
            /// </summary>
            /// <param name="Control"></param>
            /// <param name="EventName"></param>
            /// <returns></returns>
            Delegate getDelegateByControl(Control Control, string EventName)
            {
                var events =
                    typeof(Control).GetProperty("Events", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(
                        Control,
                        null) as EventHandlerList;

                var key = typeof(Control).GetField(EventName, BindingFlags.Static | BindingFlags.NonPublic);
                if (key == null)
                {
                    throw new ArgumentException("提供的事件名不存在。", "EventName");
                }

                return events[key.GetValue(null)];
            }
        }

ZhongGuanYao 2014-08-20
  • 打赏
  • 举报
回复
MouseClick!=null可能只允许本类有这种写法,继承类只能重写父类OnMouseClick方法

111,094

社区成员

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

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

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