C# Windows Forms:使用静态类实现窗口间传值

Felix
Felix
发布时间:2026-10-13 | 4人浏览过
原创

在C# Windows Forms应用中,若需在不同窗口间共享数据,可通过定义static类与变量快速实现。本文将演示如何创建静态容器,并在两个窗体间进行赋值与取值。

核心逻辑概述

C#中的static修饰符使得成员属于类型本身而非实例。利用这一点,我们可以创建一个独立的静态类作为“全局”数据中转站。无论创建多少个窗体实例,静态类中的数据始终保持一致且易于访问。

准备条件

  • 开发环境:Visual Studio(支持 .NET Framework 或 .NET Core/5+)。
  • 项目类型:Windows Forms 应用。
  • 涉及对象:Form1(源窗口)、Form2(目标窗口)及自定义的SharedClass(静态类)。
  • 界面元素:每个窗体上各有一个文本框TextBox和一个按钮Button。

真实操作顺序

第1步:创建静态共享类

目的:定义一个存放数据的容器,确保其在内存中只存在一份。

入口:在项目的命名空间下(通常在Form类之外)新建一个公共静态类。

动作:

  1. 创建一个名为SharedClass(或任意名称)的类。
  2. 添加public static关键字修饰该类。
  3. 声明一个或多个需要共享的静态变量(如字符串、整数等)。
// 定义静态类
namespace WindowsFormsApplication1
{
  public static class SharedClass 
  {
    // 声明静态变量,用于存储要传递的数据
    public static string SharedValue; 
  }
}

注意:建议将此类放在命名空间的顶层,不要嵌套在某个具体的Form类内部,以便其他所有文件都能方便引用。

第2步:在源窗口(Form1)中赋值

目的:获取用户输入并将其保存到静态变量中。

入口:Form1.cs,绑定按钮的Click事件。

动作:

  1. 在设计器中双击按钮生成点击事件处理程序。
  2. 在事件中,读取TextBox的值并赋给静态变量。
  3. 实例化并显示Form2。
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
     
    private void button1_Click(object sender, EventArgs e)
    {
      // 动作1:赋值。通过“类名.属性名”访问静态变量
      SharedClass.SharedValue = textBox1.Text;
      
      // 动作2:打开下一个窗口
      Form2 frm2 = new Form2();
      frm2.Show(); // 或者 Use ShowDialog() 进行模态对话框
    }
  }
}

第3步:在目标窗口(Form2)中取值

目的:在窗口初始化时,从静态变量读取之前存储的数据并显示。

入口:Form2.cs。

动作:

  1. 在Form2的构造函数中,或在Load事件中,访问静态变量。
  2. 将静态变量的值赋给当前的TextBox控件。
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
  public partial class Form2 : Form
  {
    public Form2()
    {
      InitializeComponent();
      
      // 动作:取值。直接从静态类中读取值并填入界面
      if (!string.IsNullOrEmpty(SharedClass.SharedValue))
      {
        textBox1.Text = SharedClass.SharedValue;
      }
    }
  }
}

完成判断

运行程序,在Form1的文本框中输入文字,点击按钮。如果Form2弹出后,其文本框中自动显示了之前在Form1输入的内容,则说明窗口间传值成功。

排错与注意事项

  • 空引用异常:如果Form2先于Form1被创建或未执行赋值操作就取值,可能会得到null或空字符串。建议在取值前增加判空逻辑(如上述代码所示)。
  • 数据丢失风险:静态变量是进程内共享的。如果程序重启或刷新页面,数据会重置。仅适用于短期内存共享。
  • 线程安全:此方法未考虑多线程环境。若在后台线程修改静态变量,主界面线程读取时可能需要同步处理,否则可能出现不可预知的结果。

简要总结

通过定义static类和变量,C#开发者可以最简单地在Windows Forms窗体间传递数据。虽然对于复杂的大型应用,推荐使用事件委托或依赖注入模式以保持松耦合,但对于小型工具或临时数据共享,静态字段法依然高效实用。

以上就是C# Windows Forms中使用静态类实现窗口间传值的详细内容,更多关于C#窗口通信的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表