C#之子窗体与父窗体之间的参数传输
最近在做项目时涉及到了子窗体与父窗体之间的参数传输问题,通过查阅与学习总结了一种方法。
1、子窗体传父窗体
Form1为主窗体,Form2为子窗体。
实现:在Form1上添加一个button1,点击button1后显示Form2,再点击Form2的button1 在button1_Click事件中通过this.Owner将Form2的textBox2的值设置给Form1的textBox1(也可以将Form2中的某个值传给Form1,然后在Form1进行后续的处理,将示例代码修改一下即可)
示例代码:
//Form1上的代码(主窗体)
public partial class Form1 : Form
{
public MainForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//显示Form2
Form2 childForm = new Form2();
childForm.Show();
//定义Form2的“爸爸”为Form1
calForm.Owner = this;
或者
//Form2 childForm = new Form2();
//childForm.Show(this);
}
}
//Form2上的代码(子窗体)
public partial class Form2 : Form
{
public CalibrationForm()
{
InitializeComponent();
}
private void button_Click(object sender, EventArgs e)
{
MainForm mForm = (MainForm)this.Owner;
//注意 如果textBox1是放在panel1中的 则先找panel1 再找textBox1
((TextBox)mForm.Controls["textBox1"]).Text = this.textBox2.Text;
//也可直接将控件的属性Modifiers修改为public 然后直接调用
mForm.textBox1.Text = this.textBox2.Text;
}
}
2、父窗体传子窗体
Form1为主窗体,Form2为子窗体。
实现:在Form1上添加一个button1,点击button1后显示Form2,然后点击Form2的button1显示Form1中的某个参数。(用构造函数来实例化Form2窗体,然后把Form1的this指针传进去,这样就可以在Form2中调用Form1的参数(此参数必须是public属性的))
示例代码:
//Form1上的代码(主窗体)
public partial class Form1 : Form
{
public MainForm()
{
InitializeComponent();
}
public string str = "你好!";
private void button1_Click(object sender, EventArgs e)
{
//实例化子窗体,并将父窗体的指针this传入
Form2 childForm = new Form2(this);
childForm.Show();
}
}
//Form2上的代码(子窗体)
public partial class Form2 : Form
{
public CalibrationForm()
{
InitializeComponent();
}
private Form1 frmMain;
public Form2(Form1 mForm)
{
InitializeComponent();
this.frmMain = mForm;
}
private void button1_Click(object sender,EventArgs e)
{
this.textBox1.Text = mForm.str;
}
}
子窗体与父窗体之间的参数传输方法不止这一种,还可以用委托等,这里只总结了个人认为较为简单的一种方法,如果以后涉及委托会进行补充。