首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> .NET Framework >> 正文

在.NET中利用委托实现窗体间通信

  下面是对应的C#代码,MainFrm.cs:

  public partial class MainFrm: Form

  {

  private void MainFrm _Load(object sender, EventArgs e)

  {

  Middle.sendEvent += new Middle.SendMessage(this.DoMethod);

  }

  public void DoMethod(string getstr)

  {

  listBox1.Items.Add(getstr);

  }

  }

  ChildFrm.cs:

  public partial class ChildFrm: Form

  {

  public ChildFrm ()

  {

  InitializeComponent();

  }

  private void button1_Click(object sender, EventArgs e)

  {

  Middle.DoSendMessage(this.textBox1.Text);

  textBox1.Text = "";

  textBox1.Focus();

  }

  }

  Middle.cs:

  public static class Middle

  {

  public delegate void SendMessage(string str);

  public static event SendMessage sendEvent;

  public static void DoSendMessage(string str)

  {

  sendEvent(str);

  }

  }

  同样我们修改一下Program.cs的代码:

  static class Program

  {

  [STAThread]

  static void Main()

  {

  Application.EnableVisualStyles();

  Application.SetCompatibleTextRenderingDefault(false);

  // Application.Run(new Form1());

  Form1 mainFrm = new Form1();

  childFrm secondFrm = new childFrm();

  secondFrm.Show();

  Application.Run(mainFrm);

  }

  }

  比较上面的VB.NET和C#代码,我们可以看出VB.NET允许直接用Event关键字声明事件,而C#则必须由我们自己首先声明事件的委托原型,然后再基于该委托声明事件,从这点看来VB.NET显得更简洁,其实VB.NET编译器在背后会自动的为我们定义一个委托对象,而且该委托与C#代码声明的委托所生成IL代码是一样的,这点大家可以通过Ildasm中间代码查看器来查看一下。引发事件,VB.NET是通过RaiseEvent关键字加上事件名称,而C#则是通过直接使用事件名称;最后是绑定事件的代码,VB.NET是通过AddHandler关键字,C#通过重载的+=操作符,对于以上两点,编译器同样会为我们生成一致的IL代码。

  当然,上面的例子比较简单,不过我们完全可以通过委托实现复杂的窗体通信,比如可以传递复杂的数据类型,同时,可以在设计结构更加良好的中间通信类。但也要提醒大家,不要动不动就要用委托,它会增加程序的复杂性,应该根据自己的需求考虑用何种方法。进入讨论组讨论。

上一页  [1] [2] 

【责编:John】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航