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

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

在 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 相关产品和应用

全部下载

专题列表