C# Winform 子窗体获取父窗体控件或值的两种方法
在 WinForms 开发中,经常遇到需要将父窗体的数据显示到子窗体的场景。如果直接使用 new 关键字实例化另一个父窗体对象来获取属性,将无法获取当前页面的最新状态。以下是两种常用的实现父子窗体通信的方法。
结果与目标
在父窗体(Logout)触发某个操作时,将其中文本框(tB_Logout_Username)的值成功传递到弹出的子窗体(Affirm),以便在子窗体中进行后续处理(如数据库查询)。
准备条件
- C# 语言环境
- WinForms 应用程序项目结构
- 两个窗体类:父窗体
Logout,子窗体Affirm
第 1 步:使用静态变量进行数据传递
这是一种简便但耦合度较高的方法。通过在父窗体中定义一个 public static 字段,可以在窗口实例创建前或创建时存储全局可访问的数据。
设置与操作
- 在父窗体中声明静态字段:在
Logout.cs中定义用于承载数据的公共静态变量。
public partial class Logout : Form
{
// 定义一个静态变量存放父窗体中的文本框的值
public static string tB_LogoutName;
}
- 在事件触发时赋值:当点击按钮触发子窗体弹出逻辑时,先将当前文本框的值存入该静态变量。
private void btt_Logout_Click(object sender, EventArgs e)
{
// 获取父窗体中的文本框的值并赋值给静态变量
tB_LogoutName = tB_Logout_Username.Text;
Affirm aff = new Affirm();
aff.Show();
}
- 在子窗体中直接读取:在
Affirm窗体中通过父窗体.静态字段的方式调用。
// 在 Affirm 窗体中使用
string parentValue = Logout.tB_LogoutName;
注意:该方法属于“取巧”做法,适合单一实例的简单传参。若涉及复杂业务逻辑,建议优先使用实例引用传递。
第 2 步:将父窗体作为属性传递给子窗体
这种方法符合面向对象设计原则。通过让子窗体持有父窗体的引用,从而拥有访问父窗体所有公共成员的权限。
设置与操作
- 在子窗体中定义公公开父窗体类型的属性/字段:修改子窗体类
Affirm,添加类型为父窗体类Logout的成员变量。
public partial class Affirm : Form // 确保继承自 Form
{
// 定义一个字段用于接收父窗体实例
public Logout MyLogout;
}
- 在父窗体实例化子窗体时赋值:在父窗体的
btt_Logout_Click事件中,将当前的父窗体实例(this)传递给子窗体的该属性。
private void btt_Logout_Click(object sender, EventArgs e)
{
Affirm aff = new Affirm();
// 将当前窗体实例赋值给子窗体的 MyLogout 属性
aff.MyLogout = this;
aff.Show();
}
- 在子窗体中通过引用访问父成员:在子窗体内通过该引用访问父窗体公开的文本框或其他属性。
// 在 Affirm 窗体内部使用
// 例如获取之前存储的数据或实时获取界面元素
if (MyLogout != null)
{
string data = Logout.tB_LogoutName; // 假设仍使用上一步的静态变量逻辑,或直接访问公开字段
}
完成判断
点击父窗体的按钮后,子窗体弹出并能正确读取或显示来自父窗体输入框的内容,即表示窗体间通信配置成功。
简要总结
以上关于 C# Winform 子窗体访问父级窗体控件和属性的详细内容,更多关于 C# 基础教程的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













