- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个表格 (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/
概述 CentOS Stream 成立于 2019 年,是“RHEL 下一步的滚动预览”。Red Hat 首席技术官 Chris Wright 和 CentOS 社区经理 Rich Bowen 各
我有一个使用 Mesosphere DC/OS 编排选项进行配置的 Azure 容器服务 (ACS) 集群。我可以在 Marathon UI 中创建一个应用程序。 但是,当我通过 Marathon U
我是一名优秀的程序员,十分优秀!