在C#中如何在不同窗体间导出导入变量?Environment.GetEnvironmentVariable是正确方法吗?
同应用内多窗体变量传递方案说明
Environment.GetEnvironmentVariable不是实现该需求的正确方法。该API的设计用途是读取操作系统或当前进程的环境变量,和同应用内不同窗体之间的变量共享完全无关,使用它实现该需求会出现作用域不可控、变量冲突、性能损耗等问题,完全不推荐。
推荐的正确实现方案
以下是C# WinForm场景下常用的跨窗体传值方案,可根据自己的使用场景选择:
- 构造函数传参:适用于父窗体打开新子窗体时的单向传值。在子窗体自定义带参数的构造函数,父窗体实例化子窗体时直接传入需要共享的变量即可。
示例代码:// 子窗体自定义构造函数 public partial class ChildForm : Form { private int _passedCount; private string _passedMsg; public ChildForm(int count, string msg) { InitializeComponent(); _passedCount = count; _passedMsg = msg; } } // 父窗体打开子窗体时传值 var child = new ChildForm(10, "测试数据"); child.Show(); - 公共属性/方法传值:适用于双向传值,或窗体已打开后的动态传值。给目标窗体定义公共可访问的属性或赋值方法,通过窗体实例直接读写即可。
- 静态类共享:适用于多窗体全局共享的变量。单独定义静态类存储公共变量,所有窗体都可以直接读写该类的静态属性。
示例代码:// 定义全局共享类 public static class GlobalVars { public static string UserName { get; set; } public static int UserId { get; set; } } // 任意窗体中读写 GlobalVars.UserName = "张三"; - 事件订阅传值:适用于源窗体变量变更后需要自动同步到目标窗体的场景。在源窗体定义自定义事件,目标窗体订阅该事件,事件触发时自动携带参数完成同步。
内容的提问来源于stack exchange,提问作者Irimia Nicolae
相关产品推荐
相关产品推荐

