C#:窗体间传值

在C# WinForm开发中,窗体间传值是常见需求:

  1. ‌构造函数传值 ‌

    子窗体通过重载构造函数接收参数,适用于单向传值且参数较少的情况。例如父窗体通过new Form2(textBox1.Text)传递数据,子窗体在构造函数中接收并显示。

  2. ‌公共属性/字段传值 ‌

    在目标窗体定义公有属性,源窗体通过实例化后赋值实现传值。例如f2.Form2Value = "Ok",灵活性较高但需注意窗体生命周期。

  3. ‌静态变量传值 ‌

    通过静态类成员实现双向数据共享,如public static string value。需注意内存管理问题,适合全局数据传递。

  4. ‌Tag属性传值 ‌

    利用控件的Tag属性存储对象,如f2.Tag = dataset。适用于临时传递复杂对象但类型安全性较低。

  5. ‌委托与事件传值 ‌

    通过自定义事件和委托实现跨窗体回调,适合子窗体向父窗体返回值。需定义委托类型和事件参数类,实现松耦合通信。

  6. ‌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;

}

相关推荐
呆呆敲代码的小Y21 分钟前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
淡海水1 小时前
09-01-内存-Unity资源生命周期全景
unity·c#·游戏引擎·.netcore·gc
椒颜皮皮虾྅4 小时前
让 C# 读懂整张图:DeploySharp 驱动 PaddleOCR v4/v5/v6,打通 OCR 全流程
开发语言·人工智能·深度学习·学习·c#·ocr·cuda
昂好的day4 小时前
C# 同步异步与多线程:Thread / Task / 线程池一次讲透(上篇)
开发语言·windows·c#
吃一碗粉只付一碗钱13 小时前
12-给SPA友好的401和403响应
c#·状态模式
caimouse20 小时前
MonoDevelop 编译用户应用程序时调用的是哪个编译器
c#
will_net1 天前
apollo 站点部署&C#接入
开发语言·c#·apollo
吾与谁归in1 天前
C#脚本工具,支持智能提示自动补全(WPF + Roslyn + AvalonEdit)
开发语言·c#·wpf
昂好的day1 天前
WPF 从零入门(上):WPF 是什么、XAML 语法、布局与样式全解
开发语言·c#·wpf