gpt4 book ai didi

c# - 获取表单的父表单名称

转载 作者:太空宇宙 更新时间:2023-11-03 19:09:21 24 4
gpt4 key购买 nike

我有一个表格 (form3),可以从其他两个表格中打开。表格 1 和表格 2。

我怎样才能知道哪个是 form3 的父级?

最佳答案

术语“父级”在 Windows 中有非常严格的定义。 Form 类像所有 UI 类一样从 Control 派生,但它非常不同,它是一个顶级窗口。与其他控件(如 Button 和 TextBox)非常不同,它们是父窗口内的子窗口。窗体的父级是桌面窗口,您不太可能对它感兴趣。

因此,谈论“Form3 的父级”是毫无意义的,它与 Form1 和 Form2 是同一个父级,根本无法帮助您区分哪个可能显示了 Form3 窗口。

Windows 确实有一种方法可以将两个顶级窗口相互关联,它具有所有者窗口 的概念。它旨在实现工具窗口或对话框,拥有的窗口始终显示在其所有者之上,并与其所有者一起最小化。创建拥有的窗口很简单:

   var toolWindow = new Form3();
toolWindow.Show(this);

此 Show() 重载采用指示其所有者的参数,this 可以是对 Form1 或 Form2 对象的引用,具体取决于此代码出现的位置。在 Form3 类中,您可以使用 Owner 属性找回所有者。

这与您真正谈论的不太可能,Winforms 通常是程序员对面向对象编程的第一个介绍,处理对象引用通常令人困惑。如果您需要引用 Form3 中的逻辑父级,则只需编写代码即可传递该父级。您可以通过为 Form3 类提供构造函数来实现:

   private Form logicalParent;

public Form3(Form parent) {
InitializeComponent();
logicalParent = parent;
}

在 Form1 或 Form2 中创建窗口只需要:

   var form = new Form3(this);
form.Show();

您可以通过为 Form1 和 Form2 设计一个基类,以面向对象的方式进一步改进此代码,该基类具有像 Form3 这样的类会感兴趣的共同成员。或者更好的是,一个 Form1 和 Form2 都感兴趣的接口(interface)和 Form2 实现,显着降低了耦合度。最后但同样重要的是,使用事件 允许 Form3 通知其逻辑父级。可能是您真正要找的东西。

关于c# - 获取表单的父表单名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124560/

24 4 0
文章推荐: Python 套接字使用函数而不是全局套接字调用
文章推荐: javascript -
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com