C#WinForm父子窗体互相传值详解回顾
这个问题困扰了大概两天,一开始就进入误区所以导致逻辑混乱捋不清运行顺序,很难真正搞得明白。
想要搞清楚,首先要知道是父窗体接收值还是子窗体接收值。
实际上就是把父窗体需要接收值得Text控件通过Event事件传递到子窗体中,然后把子窗体的Text文本数据当做参数传递到这个控件里
父窗体
子窗体
设想是父窗体中Text文本获得子窗体Text文本值。
第一步 在父窗体写代码
public void GetSon(string sonText)
{
textBox1.Text = sonText;
}
方法中的sonText参数实际是子窗体中需要传递给父窗体的值
第二步 在子窗体写代码
public delegate void MyDel(string value);
public partial class Son : Form
{
public Son()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyEvent(textBox1.Text);
}
public event MyDel MyEvent;
}
声明了一个委托,它的作用是作为父窗体方法的委托附加给他事件的,所以需要按照父窗体里的方法规格写。
public delegate void MyDel(string value);
声明了一个事件,事件需要将委托名当做类型名。
public event MyDel MyEvent;
把text数据作为参数
private void button1_Click(object sender, EventArgs e)
{
MyEvent(textBox1.Text);
}
第三步 在父窗体的Button按钮中写代码
将父窗体的方法用+=的格式附加事件中
+=只能作用于委托,所以在右边用上子窗体里的委托并将方法放入
private void button1_Click(object sender, EventArgs e)
{
Son son = new Son();
son.Show();
son.MyEvent +=new MyDel(GetSon);
}
最后效果,在子窗体Text中输入数据,点击确认后,父窗体就能收到数据了。
有不对的地方,请大佬指出,这只是我个人的理解思路