事件一直搞不清楚,今天仔细的研究了下,似乎有点明白了,但还是不很清楚。以下是我的理解,希望懂的人看一下我的理解是否正确,不对的地方请指正:比如某个类需要接受鼠标的操作,那么,在实例化的时候,在构造函数里就要向鼠标订阅事件【虽然不知道如何订阅鼠标事件,但感觉应该类似Mouse.Click += new EventHanle(Function)这样,不知是实际应该如何?】,然后,当鼠标有所动作的时候,就会由该操作的方法中的一条语句触发事件,然后该事件就依次调用添加到它上面的每个委托,委托则调用相应的事件处理方法。除此之外还有个疑问,实例化一个对象的时候向鼠标订阅了事件,那么当该实例销毁的时候是否要取消订阅呢?若需要,如何取消?
解决方案 »
- 关于TcpClient发送图片的问题
- 想做实现一个监控显示功能,用TIMER每隔10秒显示变量的内容
- 关于发邮件的问题
- System.Text.UTF8Encoding不是受支持的编码名
- 如何实现点击MDI子窗口中的关闭按钮,让子窗口最小化?
- 在.net里 在前台把prompt提示框的输入值赋给hiddenfield怎么写啊
- 简单openFileDialog问题。
- 谁给我一份treeview鼠标右键菜单的源代码啊!
- 为什么会出现 "找不到类型或命名空间名称..." 这样的错误提示?
- 如何设置文本框/组合框的掩码?
- HTTP 模拟请求, 谁帮看看 代码 有什么问题
- unicode 转 gb2312 问题
Button1.OnClick -= Function
Mouse.Click += new EventHanler(Function) 的式了直接 Mouse.Click += Function就行了
感谢你对我问题的细心回答。老实说,我又冒出些疑问……可能罗嗦了点,希望可以再得到一些回答1.回调这词有看到过,没仔细看,看来还得补补课。OnClick事件的话是说类似Button1.OnClick 的事件么?也就是说向Button1订阅事件了吧。但是Button1要接受鼠标的点击,必然是要向鼠标订阅事件的吧我想。比如我们自己要写个控件,就得自己向鼠标订阅事件了吧。还是说鼠标的点击不是以事件方式进行的呢?说起来“消息”这个东西我还不知道到底怎么回事,也得补补了……不过我现在的理解是消息就是事件机制,不知道对不对?2.“如果委托有返回值”,据我所知,事件接受的委托不是必须是Void的么?我弄错了么?可以有返回值?3.我知道我问的太多了,但是作为一个菜鸟我还想问:如果我没有取消订阅的操作,而程序被关闭了呢?这个对象会一直占着资源么?或许问出这样的问题是其他什么东西还不懂的原因,希望可以得到指教……
所谓回调,其实很简单,好比是这样,我不知道你什么时候会结贴发分数,但我希望你结贴时能通知我一声,怎么通知呢? 于是我先给你我的email,你结贴时,先查找一下我给你的email地址,然后发个邮件,这就是回调了。 也就是,我想知道你的信息,给你提供一个返回信息的渠道给我,然后你使用这个渠道联系我,这就是回调。OnClick 正式你说的意思。你说向鼠标订阅事件,这种想法我认为比较好,但实际上C#里还是Windows机制,鼠标事件是通过消息发送给控件的,我们并不能直接“订阅”鼠标事件。回调和消息是不同的,给你推荐几篇文章看看:1. 事件处理模式
http://www.soft-bin.com/html/2010/07/07/%e4%ba%8b%e4%bb%b6%e5%a4%84%e7%90%86%e6%a8%a1%e5%bc%8f.html2. Windows消息机制
http://www.soft-bin.com/html/2010/07/07/windows%e6%b6%88%e6%81%af%e6%9c%ba%e5%88%b6.html3. C#中调用Win API函数 (可以用这个来理解下C#和消息机制的关系)
http://www.soft-bin.com/html/2010/07/15/csharpcallwinapi.html
是可以有返回值的,我们定义delegate的时候,可以定义返回值,比如:
public delegate int Add(int, int);咱们搞技术的又不是混黑社会的,知道得多点不会危险,有问题就应该问,呵呵。
程序关闭,会释放进程所占用的所有资源,所以这个是不需要担心的。你需要担心的只是不停地订阅某个事件,却不取消,而造成订阅了事件的对象无法在程序周期内释放,但实际上这个问题对于一个新手来说,也无需考虑那么多了,呵呵
再给你推荐一篇文章吧:C#2.0中使用匿名delegate
http://www.soft-bin.com/html/2010/07/16/delegate_in_csharp.html
定义事件的对象才可以触发事件,通过订阅事件来获得通知
一个事件可以被多次订阅
那个网站很不错,简洁但不简单,就连那个tag的flash也是简洁而不简单。
不过我看起来相当吃力啊……现在想要完全看明白是不能了,看懂多少算多少吧,然后基础学好再来看……再次感谢散沙大人,同样感谢其他回答我问题的同志们!这次的分就给散沙大人了,60分也没什么好分的……
而且作为一只菜鸟,一直都只问问题,这是我最后的60分了……
看来要想办法赚点可用分了……
就此结贴。