c# WinForm 窗体之间传值的几种方式(小结)

2020-01-05 09:33:15王旭

子窗体frmGroup中代码


 public partial class frmGroup : Form
 {
  //定义公共属性
  public string stationID = "";
 }

特点 : 单向传值,只能主窗体给子窗体传值,实现简单

方式三: 使用委托传值

先来看子窗体frmGroup中代码


namespace Siemens.Simatic.GUIClient.MESClient
{
  //1、声明一个委托
  public delegate void setTextValue(string textValue,bool flag);
  public partial class frmGroup : Form
  {
    //2、声明一个委托类型的事件
     public event setTextValue setFormTextValue;
     public string groupName = "";
     public bool flagBtnGroup = false; 
     public frmGroup()
     {
      InitializeComponent();
     }
     //轮询‘行为'按钮(相当于按钮单击事件)
     private void tmrBtn_Tick(object sender, EventArgs e)
     {
      if (sender is ButtonX) {
        ButtonX butX = (ButtonX)sender;//判断触发事件的是不是Button
        groupName = butX.Text.Trim();
        flagBtnGroup = true;
        //3、准备要回传的数据。 
        setFormTextValue(this.groupName.Replace(" ", ""), this.flagBtnGroup );
        this.Close();
        return;
      } 
    }

主窗体frmMain中代码


 private void btnGroup_Click(object sender, EventArgs e)
    {
      frmGroup frmGro = new frmGroup();
       //4、初始化事件 
      frmGro .setFormTextValue += new setTextValue(frmGro _setFormTextValue);
      //变量传值 ,注意顺序写在ShowDialog()方法之前
      frmGro .stationID = this.terminalID;
      frmGro .ShowDialog();
    }
    //5、事件具体实现
     public void frmGro _setFormTextValue(string textValue,bool flag)
    { 
      this.newGroupName = textValue;
      this.flagBtnGroup = flag;
      if (!string.IsNullOrEmpty(newGroupName))
      {
         ……
      }
     }

特点 :适合子窗体数据实时回传父窗体。

方式四:使用构造函数传递一个数值