WinForm 参数传递

本人刚刚接触Winform ,学习之后分享下心得。

 winform 窗体与窗体之间参数的传递常规的有两种

   1.构造函数传参。即重载第二个窗体的构造函数,把需要传的参数写入第二个窗体的构造函数。代码如下:

  Form1:

        private void button1_Click(object sender, EventArgs e)
        {
            string txt = this.textBox1.Text;
            Form2 frm = new Form2(txt);//带入构造函数
            frm.Show();
        }

  Form2:

  

View Code
    public partial class Form2 : Form
    {
        private string TxtVal = null;//上一窗体带过来的值
        public Form2(string txt) //重载构造函数
        {
            this.TxtVal = txt;//获取传过来的值
            InitializeComponent();

            //显示,用于测试
            ShowPara();
        }

        public Form2()
        {
            InitializeComponent();
        }

        public void ShowPara()
        {
            this.label1.Text = this.TxtVal;
        }


    }

  

2. 全局变量传参数。即 第二个窗体通过获取第一个窗体的全局变量的值。来达到传参的目的。代码如下:

Form1:

View Code
 public static string TxtVal = "";//公共的静态变量。可以不示例就访问。
        private void button2_Click(object sender, EventArgs e)
        {
            TxtVal = this.textBox1.Text;
            Form3 frm = new Form3();
            frm.Show();
        }

Form3:

View Code
 public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
            ShowPara();
        }

        public void ShowPara()
        {
            this.label1.Text = Form1.TxtVal;
        }
    }

  

另外。还可以通过事件来传参数。 这种方式的好处是可以使解耦两个form之间的关联。

1.先定义一个中间模块(Observer类库),用来处理两个FORM中关系。

View Code
namespace Observer
{
    /// 
    /// 定义一个信息委托
    /// 
    /// 发布者
    /// 发送内容
    public delegate void MsgDlg(object sender,object msg);

    public class MidModule
    {
        /// 
        /// 消息发送事件
        /// 
        public static event MsgDlg EventSend;


        public static void SendMessage(object sender, object msg)
        {
            if (EventSend != null)//
            {
                EventSend(sender, msg);
            }
        }
    }

2.Form1代码

View Code
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string txt=this.textBox1.Text;
            Form2 frm = new Form2();
            frm.Show();

            MidModule.SendMessage(this, txt);//发送参数值
        }
    }

3. Form2代码

View Code
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();

            //订阅了信息发送事件,即接受参数值
           MidModule.EventSend+=new MsgDlg(MidModule_EventSend);
        }

       //接受参数后具体干啥的实现
        private void MidModule_EventSend(object sender, object msg)
        {
            if (sender != null)
            {
                this.label1.Text = msg.ToString();
            }
        }


    }

  

这样就很神奇的完成了传参的步骤。

参考:http://topic.csdn.net/u/20100112/12/34f6d852-fd02-474f-bfc4-621c6baa35a8.html

Demo下载

你可能感兴趣的:(.NET编程)