在C# WinForm开发中,窗体间传值是常见需求:
-
构造函数传值
子窗体通过重载构造函数接收参数,适用于单向传值且参数较少的情况。例如父窗体通过new Form2(textBox1.Text)
传递数据,子窗体在构造函数中接收并显示。 -
公共属性/字段传值
在目标窗体定义公有属性,源窗体通过实例化后赋值实现传值。例如f2.Form2Value = "Ok"
,灵活性较高但需注意窗体生命周期。 -
静态变量传值
通过静态类成员实现双向数据共享,如public static string value
。需注意内存管理问题,适合全局数据传递。 -
Tag属性传值
利用控件的Tag属性存储对象,如f2.Tag = dataset
。适用于临时传递复杂对象但类型安全性较低。 -
委托与事件传值
通过自定义事件和委托实现跨窗体回调,适合子窗体向父窗体返回值。需定义委托类型和事件参数类,实现松耦合通信。 -
Owner属性传值
子窗体通过this.Owner
访问父窗体实例,直接操作父窗体控件。需注意窗体间引用关系。
选择建议:
- 简单单向传值优先用构造函数或属性;
- 复杂数据或双向交互推荐委托事件;
- 全局数据可用静态变量但需谨慎。
示例代码片段(构造函数传值):
// Form1中
private void button1_Click(object sender, EventArgs e) {
Form2 f2 = new Form2(textBox1.Text);
f2.Show();
}
// Form2中
public Form2(string initText) {
InitializeComponent();
label1.Text = initText;
}