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() 是可以的。
这个怎么办呢?