转:c#委托事件实现窗体传值通信

C#实现Winform窗口间数据交互的三种方法介绍

2010-03-15  来自:CNBLOG  字体大小:【  
  • 摘要:本文分别介绍C#实现Winform窗口间数据交互的三种方法:修改子窗体的构造函数、给窗体添加属性或方法、通过委托的方法,并提供简单的示例代码供参考。
1、修改子窗体的构造函数:

  简单地说就是通过修改子窗体Form的构造函数,如下所示:

public Frm_Child(string Para1, ArrayList List1, TextBox textBox1, Form. Frm_Main)
  {
      InitializeComponent();
   }
上面的例子中,为子窗体Frm_Child添加了4个参数,分别是:字符串Para1,字符数组List1,文本控件textBox1和父窗体Frm_Main,下面简单区分一下它们各自的特点:

  <1> 字符串:单向的值传递,在子窗体中不能通过修改此参数的值来间接改变父窗体中的数据。

  <2> 字符数组:引用型传递,可以通过将父子窗体中不同的成员变量指向相同的数组,即可实现变更一方,同时更新对方的数据。

  <3> 控件:引用型传递,可以通过修改该控件的数据来直接达到控制父窗体中该控件数据的目的。

  <4> 窗体: 这个最直接,直接将父窗体传递到子窗体中,我们可以方便地在子窗体中修改父窗体中所有授权为public 的数据。

  2、给窗体添加属性或方法:

  获取或设置拥有此窗体的窗体。若要使某窗体归另一个窗体所有,请为其 Owner 属性分配一个对将成为所有者的 窗体的引用。当一个窗体归另一窗体所有时,它便随着所有者窗体最小化和关闭。例如,如果 Frm_Child 归窗体 Frm_Main所有,则关闭或最小化 Frm_Main 时,也会关闭或最小化 Frm_Child。并且附属窗体从不显示在其所有者窗体后面。可以将附属窗体用于查找和替换窗口之类的窗口,当选定所有者窗体时,这些窗口不应消失。若要确定某父窗体拥有的窗体,请使用OwnedForms属性。

  我们可以通过下面的方式来确定这种从属的窗体关系:

Frm_Child form. = new Frm_Child();
   form.Owner = this;
   form.ShowDialog();
  或者
   Frm_Child form. = new Frm_Child();
   form.ShowDialog(this);
  定了从属关系以后,我们就可以通过在Form的load事件中或者通过定义public的属性或者方法来彼此进行数据修改操作,简单操作如下:
   Frm_Main pareForm. = (Frm_Main)this.Owner;  
   this.listData1 = pareForm.ListData2;

  3、通过委托的方法:

  相对以上两种方法来说,这种方法可能较复杂一些,但基本思路是一样的,需要修改的地方如下:

  <1> 在Frm_Child.cs中添加委托函数定义:public delegate void SendFun(string str);

  <2> 在Frm_Child.cs中添加委托示例:public event SendFun SendToParent;

  <3> 在Frm_Child.cs中添加一个按钮,并添加其事件如下:

     private void button1_Click(object sender, EventArgs e)
     {
       if (Send != null)
      {
           Send(this.textBox1.Text);
       }
      }
  <4> 在Frm_Main.cs中添加方法RecvInfo()方法如下:
    private void RecvInfo (string str)
    {
        textBox1.Text = str;
    }
  <5> 在Frm_Main.Designer.cs中的InitializeComponent()方法中添加委托实例定义:
this.myForm.Send += new Example3_Frm_Child. SendFun (RecvInfo);

  通过上面五步操作,即可达到Form间的通信的目的。
 

    以上介绍的就是C#实现Winform窗口间数据交互的三种方法,希望对你了解C#实现Winform窗口间数据交互有所帮助。

posted @ 2013-07-17 18:41  永远的菜鸟@me  阅读(605)  评论(0编辑  收藏  举报