C# winform 主窗体与子窗体互相传递消息的例子 (一)

主窗体向子窗体传递信息

描述:主窗体form1上有button1,点击button1,则弹出子窗体form2。
form2上有随便一个什么控件,比如一个text2.
form1上还有另外一个button2,
要求点击button2,则text2文本框的内容变为 button2点击时候传递过来的内容。


其中用到三个cs文件,

一个是Form1.cs, 一个是 Form2.cs
另一个是用于传参的,专门自建的MyEventArg.cs.

使用evnet方式传参。
不多说,直接上源码,简单易懂可运行,完事。

Form1.cs:

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public event EventHandler Main2SlaveMsgEvent;


        private void button1_Click(object sender, EventArgs e)
        {

            Form2 form2 = new Form2();

            Main2SlaveMsgEvent += form2.textChange;

            form2.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            MyEventArg eee = new MyEventArg()
            {
                Text = DateTime.Now.Second.ToString()
            };

            Main2SlaveMsgEvent.Invoke(this,eee);
        }
    }
}

Form2.cs

using System;
using System.Windows.Forms;

namespace WindowsFormsApp1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        public void textChange(object sender, EventArgs e)
        {
            var a = e as MyEventArg;
            textBox2.Text = a.Text;
        }
    }
}

MyEventArg.cs

using System;

namespace WindowsFormsApp1
{
    class MyEventArg : EventArgs
    {
        //传递主窗体的数据信息
        public string Text { get; set; }
    }
}

直接可运行,完事。

注意直接从主窗体可以这样通过event传消息给子窗体,但我写的同样的方式,子窗体传给主窗体,主窗体似乎却不能显示。
尽管MessageBox.Show() 是可以的。
这个怎么办呢?

你可能感兴趣的:(C#,winform桌面程序)