C#两个窗体之间值通信

         C#两个或者多个窗体之间值得传递方法有很多种,大致可以分为单向传递和双向传递两种,后者当然更加灵活一点,对于C#的特点体现的也最好。这里总结三种最为常用的方法,通过事件委托和单项窗体传参以及设置全局变量进行通信。

1、事件委托

       我们可以做两个窗体Form1,Form2来实现两个整数的相加求和,其中前者负责输入第一个整数,通过点击事件弹出第二个窗体,在第二个窗体中设置第二个整数,再返回整数给第一个窗体,实现求和。

       首先,必须对委托机制有初步了解,委托说白了就是C++中的函数指针,也就是对调用的函数使用一个别名,只不过C#是完全面向对象的,没有指针了而已,类型更加安全。

      具体到本次实例,我们定义的委托实例或者变量应该是针对事件的,所以:

     1、定义委托

         public delegate void SendMessage(string str);这里我们定义了一个返回为空的SendMessage委托,签名为string 类型 str;

     2、定义(事件类型的)委托变量或者实例

         public event SendMessage Send;

         或者public SendMessage Send;(event本身也是一种委托类型)

     3、窗体1及主要代码:

       

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 form2 = new Form2();
            form2.Send+=new Form2.SendMess(Form1Get);

          // 通过多番委托来实现 ,注意等式左右的签名必须相同,即左边的form2.Send委托实例和邮编的SendMess指向的Form1Get必须具备相同的参数列表和返回值        

         form2.ShowDialog();
        }

        private void Form1Get(string str)
        {
            this.textBox2.Text = str;//该方法被调用,作为委托参数,实现通信
        }

        private void button2_Click(object sender, EventArgs e)
        {
           this.textBox3.Text = (int.Parse(this.textBox1.Text) + int.Parse(this.textBox2.Text)).ToString();
        }

    4、窗体2及主要代码:

    

        public Form2()
        {
            InitializeComponent();
        }
        public delegate void SendMess(string str);//定义SendMess委托
        public SendMess Send;//定义委托变量
        private void button2_Click(object sender, EventArgs e)
        {
            Send(textBox2.Text);//该方法被窗体1作为委托变量调用,与窗体1的Form1Get对应,具备相同签名。
            this.Close();
        }

     5、运行程序,即可实现窗体1输入一个值,点击,窗体2设置第二个数,并在第一个窗体中实现加法运算。

2、单项窗体传参

       我们把仅能进行单项传递参数的方法统称为单项窗体传参,包括通过构造方法、设置public变量方法以及继承方法。这些方法都可以通过委托代替,并且网上介绍较多,不赘述。

3、设置全局变量

     基本不用,除非工程较小,并且在程序设计和编码过程中时刻谨记。。。

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