c#窗体传值代码方法

  

<强>一、前言
  

  

我们在做Winform窗体程序开发的时候,会经常遇到窗体之间相互传值。假设有下面的一个场景:一个主窗体和一个子窗体,点击主窗体上面的按钮给子窗体传值,并在子窗体上面显示出来,一般会有如下几种方式实现。

  

<强>二、公共属性

  

我们可以在子窗体里面定义一个公共的属性,然后在父窗体里面给公共属性赋值,这样可以实现窗体之间传值,子窗体代码如下:

        使用系统;   使用System.Windows.Forms;      名称空间DelegateDemo   {   公共部分类frmChild:形式   {   公共frmChild ()   {   InitializeComponent ();   }//定义一个公共属性,接收传递的值   公共字符串strMessage{得到;设置;}///& lt; summary>///窗体加载///& lt;/summary>///& lt;参数name=胺⒓恕弊4? lt;/param>///& lt;参数name=" e "祝辞& lt;/param>   私人空间frmChild_Load(对象发送方,EventArgs e)   {//将接收到的值显示在窗体上   this.lblMessage。文本=strMessage;   }   }   }      

父窗体代码:

        使用系统;   使用System.Windows.Forms;      名称空间DelegateDemo   {   公共部分类frmParent:形式   {   公共frmParent ()   {   InitializeComponent ();   }///& lt; summary>///单击事件///& lt;/summary>///& lt;参数name=胺⒓恕弊4? lt;/param>///& lt;参数name=" e "祝辞& lt;/param>   私人空间btn_Value_Click(对象发送方,EventArgs e)   {   frmChild孩子=new frmChild ();//给窗体的公共属性赋值   的孩子。strMessage=this.txtMessage.Text.Trim ();//显示子窗体   child.Show ();   }   }   }      

这种方式有一个缺点:属性需要设置为公众不安全。

  

<强>二、公共方法
  

  

我们还可以在子窗体里面定义一个方法,通过调用方法传值,子窗体代码如下:

        使用系统;   使用System.Windows.Forms;      名称空间DelegateDemo   {   公共部分类frmChild:形式   {   公共frmChild ()   {   InitializeComponent ();   }//定义一个公共属性,接收传递的值//公共字符串strMessage{得到;设置;}//定义属性为私有的   私人字符串strMessage{得到;设置;}///& lt; summary>///给私有属性赋值///& lt;/summary>///& lt;参数name=" strText祝辞& lt;/param>   公共空间SetText(字符串strText)   {   strMessage=strText;   }///& lt; summary>///窗体加载///& lt;/summary>///& lt;参数name=胺⒓恕弊4? lt;/param>///& lt;参数name=" e "祝辞& lt;/param>   私人空间frmChild_Load(对象发送方,EventArgs e)   {//将接收到的值显示在窗体上   this.lblMessage。文本=strMessage;   }   }   }      

父窗体代码:

        使用系统;   使用System.Windows.Forms;      名称空间DelegateDemo   {   公共部分类frmParent:形式   {   公共frmParent ()   {   InitializeComponent ();   }///& lt; summary>///单击事件///& lt;/summary>///& lt;参数name=胺⒓恕弊4? lt;/param>///& lt;参数name=" e "祝辞& lt;/param>   私人空间btn_Value_Click(对象发送方,EventArgs e)   {   #地区调用公共属性赋值//frmChild孩子=new frmChild ();////给窗体的公共属性赋值//子。strMessage=this.txtMessage.Text.Trim ();////显示子窗体//child.Show ();   # endregion         #地区调用方法赋值   frmChild孩子=new frmChild ();//给窗体的公共属性赋值   child.SetText (this.txtMessage.Text.Trim ());//显示子窗体   child.Show ();   # endregion   }   }   }      

这种方式同样也有缺点:属性虽然是私人的了,但是方法还是公共的。

  

<强>三,委托
  

  

上述两种方式都是不安全、下面我们使用委托来实现窗体之间传值。

  

1,定义一个委托
  

  

我们在主窗体里面定义一个有参无返回值的委托:

     //定义一个有参无返回值的委托   私人委托无效SendMessage(字符串strMessage);      

2,实例化一个此委托类型的事件
  

  

在父窗体里面定义一个委托类型的事件:

     //定义一个委托类型的事件   公共事件SendMessage sendMessageEvent;

c#窗体传值代码方法