C#跨窗体参数传递方法示例:静态变量与实例操作

3星 · 超过75%的资源 需积分: 0 2 下载量 172 浏览量 更新于2024-09-13 收藏 74KB PDF 举报
在C#编程中,由于与VB.NET的全局变量不同,我们需要采用其他方式来实现不同窗体之间的参数传递。本文将介绍一种方法,主要应用于两个Windows应用程序窗口之间的数据交换。 首先,创建一个新的C#项目,并在此项目中添加两个窗体:Form1和Form2。在Form1中,我们创建一个静态字符串变量`myTestStr1`,用于存储我们要传递的参数。为了方便获取和设置这个值,我们为Form1类添加了一个`public`的静态属性`GetStrValue`,同时提供getter和setter方法: ```csharp public class Form1 : Form { public static string myTestStr1 = ""; public Form1() { InitializeComponent(); myTestStr1 = "Hello!"; } public string GetStrValue { get { return myTestStr1; } set { myTestStr1 = value; } } private void but_Test_Click(object sender, EventArgs e) { Form2 frm2 = new Form2(); this.ShowDialog(); // 显示Form1 frm2.ShowDialog(this); // 弹出Form2 this.Close(); // 关闭Form1 } } ``` 在Form1中,当点击名为"but_Test"的按钮时,会创建一个新的Form2实例,并显示出来。关闭Form1后,Form2继续存在。接着,在Form2的"but_Yes_Click"事件中,我们可以通过`Form_Form1.myTestStr1`直接访问并显示Form1的`myTestStr1`值,这展示了静态变量在不同窗体间的共享。 然而,如果在Form2中想要修改`myTestStr1`的值,不能直接改变静态变量,因为静态变量是所有实例共享的。所以,我们需要创建Form1的一个新实例`frm2`,然后通过这个实例的`GetStrValue`属性来操作`myTestStr1`,如下所示: ```csharp private void but_Yes_Click(object sender, EventArgs e) { MessageBox.Show(Form_Form1.myTestStr1); // 显示原始值 Form_Form1 frm2 = new Form_Form1(); frm2.GetStrValue = "How do you do?"; // 修改静态变量值 MessageBox.Show(frm2.GetStrValue); // 显示修改后的值 MessageBox.Show(Form_Form1.myTestStr1); // 再次显示,确认修改 } ``` 总结,这种方法利用了C#中的静态属性和事件处理机制,展示了如何在两个不同窗体之间传递和共享数据。需要注意的是,静态变量虽然简单,但其全局性质可能会影响代码的可维护性和封装性,因此在实际开发中应根据具体需求选择合适的参数传递方式。