欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-14 20:39:52
...

主窗体向子窗体传递信息

描述:主窗体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() 是可以的。
这个怎么办呢?