| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 631 人关注过本帖
标题:C#--------事件解决方案-------------
只看楼主 加入收藏
郭亚峰
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-7
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
C#--------事件解决方案-------------
C#编程中的事件的机制是什么  解决办法是什么
搜索更多相关主题的帖子: 方案 
2009-10-07 12:07
vxbb
Rank: 6Rank: 6
等 级:侠之大者
帖 子:163
专家分:440
注 册:2008-8-18
收藏
得分:6 
理论问题?

QQ:491697374  Mail:vxbb@
2009-10-07 12:16
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:6 
不知道你有没有学过C,委托也就是你说的delegate,相当于C中的函数指针。在C语言里,通过函数指针将一个函数当做参数传递。到了C#,完全都是面向对象了。函数<方法>也被看成一个对象,这个对象是一个特殊的对象。必须得用delegate关键字来声明。所以就有了委托。  
  
举个简单的例子,假如有一个方法,  
 
 
public string GreetingToSomebody(string PersonName)  
{  
    return "Hello!" + PersonName + "!";  
}  

 
  
这是一个带有一个string参数并且有一个返回string值的方法。我们可以建立其对应的委托。  
  
 
 
public delegate GreetingEventHandler string (string PName);  

  
这样,我们就建立一个对应于一个string参数和一个返回string值的委托。  
我们可以使用该委托传递方法。  
  
例如:  
  

public void ShowGreeting(GreetingEventHandler GEH)  
{  
    Console.WriteLine(GEH("athenalux"));  
}  

  
当然,这也是一种十分简单的例子。  
  
然后我们看看事件吧。  
事件是一个特殊的委托。概念性的东西就不要我多说了,看看怎么用事件吧。  
首先,声明一个事件。  
  
  
public event GreetingEventHandler OnGreeting;  
  
这就是一个简单的事件。每一个事件后面都有一个委托,也就是定义这个事件的响应方法,我们在winForm里经常看见,EventHanlder,就是这么一个意思。  
定义完事件之后,我们就可以触发事件和添加事件的处理程序了。  
  
在C#里,事件是以下面的方式进行触发:  
  
  
程序代码:  
OnGreeting("Me");  

  
事件的名字,加上要传递给事件处理程序的参数。参数的个数和类型都必须与事件的委托对应。对吧?  
可能你会问,我们要这个参数干嘛?费劲!这个参数可以传递当前对象的一些信息给响应方法,是非常有用的。  
前面给你回的帖子里,就用到了这个。Form2定义了一个事件,这个事件触发的时候会回给出两个参数,一个是当前窗体的对象,另一个是自己定义的EventArgs..这个,你可以自己参见代码学习。  
  
事件响应,即事件响应方法。当一个事件触发后,必须要一个方法来处理它。不然,触发这个事件就没有意义了。拿你前面的例子来说,单击了Button按钮,就应该触发传值事件。然后给这个传值事件添加一个处理方法,就是把Form2的某个值取出来,用在Form1中。这也是windows Form中的事件机制,非常重要。  
  
说说什么情况使用事件吧,在winForm中,事件是用来通信的。例如:就像Form1和Form2之间的通信。  
举个例子,当Form2中的一些数据更新了,需要通知Form1, 数据更新了!!!如果没有事件,你用什么构造函数啊,静态变量啊,都是相当的繁琐不直观。这时候也就是事件的威力了!使用事件,轻松就可以实现了。  
2009-10-07 15:54
郭亚峰
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2009-10-7
收藏
得分:0 
是理论问题


谢谢各位的帮助
2009-10-07 20:05
athenalux
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:河北石家庄
等 级:小飞侠
威 望:8
帖 子:975
专家分:2514
注 册:2008-11-26
收藏
得分:6 
三楼的例子怎么拿我的帐号名来用了?
 Console.WriteLine(GEH("athenalux"));  

QQ:81704464
2009-10-08 07:37
快速回复:C#--------事件解决方案-------------
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027423 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved