C# Winform 子窗体获取父窗体控件或值的两种方法

江屿
江屿
发布时间:2026-10-13| 6人浏览过
原创

在 WinForms 开发中,经常遇到需要将父窗体的数据显示到子窗体的场景。如果直接使用 new 关键字实例化另一个父窗体对象来获取属性,将无法获取当前页面的最新状态。以下是两种常用的实现父子窗体通信的方法。

结果与目标

在父窗体(Logout)触发某个操作时,将其中文本框(tB_Logout_Username)的值成功传递到弹出的子窗体(Affirm),以便在子窗体中进行后续处理(如数据库查询)。

准备条件

  • C# 语言环境
  • WinForms 应用程序项目结构
  • 两个窗体类:父窗体 Logout,子窗体 Affirm

第 1 步:使用静态变量进行数据传递

这是一种简便但耦合度较高的方法。通过在父窗体中定义一个 public static 字段,可以在窗口实例创建前或创建时存储全局可访问的数据。

设置与操作

  1. 在父窗体中声明静态字段:在 Logout.cs 中定义用于承载数据的公共静态变量。
public partial class Logout : Form
{
    // 定义一个静态变量存放父窗体中的文本框的值
    public static string tB_LogoutName;
}
  1. 在事件触发时赋值:当点击按钮触发子窗体弹出逻辑时,先将当前文本框的值存入该静态变量。
private void btt_Logout_Click(object sender, EventArgs e)
{
    // 获取父窗体中的文本框的值并赋值给静态变量
    tB_LogoutName = tB_Logout_Username.Text;
    
    Affirm aff = new Affirm();
    aff.Show();
}
  1. 在子窗体中直接读取:在 Affirm 窗体中通过 父窗体.静态字段 的方式调用。
// 在 Affirm 窗体中使用
string parentValue = Logout.tB_LogoutName;

注意:该方法属于“取巧”做法,适合单一实例的简单传参。若涉及复杂业务逻辑,建议优先使用实例引用传递。

第 2 步:将父窗体作为属性传递给子窗体

这种方法符合面向对象设计原则。通过让子窗体持有父窗体的引用,从而拥有访问父窗体所有公共成员的权限。

设置与操作

  1. 在子窗体中定义公公开父窗体类型的属性/字段:修改子窗体类 Affirm,添加类型为父窗体类 Logout 的成员变量。
public partial class Affirm : Form // 确保继承自 Form
{
    // 定义一个字段用于接收父窗体实例
    public Logout MyLogout;
}
  1. 在父窗体实例化子窗体时赋值:在父窗体的 btt_Logout_Click 事件中,将当前的父窗体实例(this)传递给子窗体的该属性。
private void btt_Logout_Click(object sender, EventArgs e)
{
    Affirm aff = new Affirm();
    // 将当前窗体实例赋值给子窗体的 MyLogout 属性
    aff.MyLogout = this;
    aff.Show();
}
  1. 在子窗体中通过引用访问父成员:在子窗体内通过该引用访问父窗体公开的文本框或其他属性。
// 在 Affirm 窗体内部使用
// 例如获取之前存储的数据或实时获取界面元素
if (MyLogout != null)
{
    string data = Logout.tB_LogoutName; // 假设仍使用上一步的静态变量逻辑,或直接访问公开字段
}

完成判断

点击父窗体的按钮后,子窗体弹出并能正确读取或显示来自父窗体输入框的内容,即表示窗体间通信配置成功。

简要总结

以上关于 C# Winform 子窗体访问父级窗体控件和属性的详细内容,更多关于 C# 基础教程的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。