【发布时间】:2020-10-24 10:51:05
【问题描述】:
我有 MainForm、ChildForm 和 usercontrol1。我将 usercontrol1 嵌入到 Mainform。 usercontrol1 中有一个按钮。单击按钮时,我想打开 ChildForm(作为 mdiform)。 ChildForm 已最大化打开。我想始终显示 MainForm 标题栏。 我尝试了这里的代码,但它不起作用。此代码在 usercontrol1 的按钮单击事件中
ChildForm t = new ChildForm ();
MainForm m = new MainForm();
t.MdiParent = m; //Also I tried 'this' too
t.Dock = DockStyle.Fill;
t.Show();
谢谢
【问题讨论】:
-
当然不要创建 new 主窗体,您要使用现有的主窗体。如果您根本无法获得对它的引用,那么 Application.OpenForms[0] 将无法获得它。一般来说,用户控件不应该自己创建新窗口。他们应该引发一个事件。当然,父母可以轻松订阅事件并获得对主窗口的引用。
-
@HansPassant 我不确定我是否同意你的观点,即 UC 不应该创建新表单。我已经看到
UserControl(继承自Button)被开发来封装反射加载Form控件的过程(或者如果提供的对象没有创建Form并添加UserControl) t 继承自Form),节省了大量时间在Click事件中重写相同的代码。 -
所以你以前见过糟糕的代码,这并不能证明什么。如果它是如此优越,那么公开一个公共方法当然是一种允许父级在其事件处理程序中重用该代码的简单方法。或者不做自己的事情,事件的重点。