我有一个打开MDI子窗体的Windows窗体应用程序。当我选择这些表单时,我需要将其windowstate设置或渲染为Maximized。问题是,当我在打开的表单之间导航时,它会恢复到正常的窗口状态,当我将窗口状态再次设置为最大化时,它会显示从正常状态到最大化状态的转换,并且看起来不太好。
如何创建具有MDI父窗体的Windows应用程序,该窗体以最大化窗口状态打开许多MDI子窗口?
答案 0 :(得分:3)
如果您希望窗口状态始终最大化,我建议您远离MDI表单。在这种情况下,TabControl可能会更好地工作。
MDI表单存在相当多的可用性问题,这就是为什么它们不再常用,并且往往被其他控件/选项替换。
答案 1 :(得分:3)
这是基于使用MDI“父表格和子表格范例”的答案,其中包含以下假设:
你的MDIParentForm上有一个MenuStrip控件'Dock ='Top,你已经实现了自动MDI& Window菜单处理程序,如下所述:How to: Create an MDI Window List with MenuStrip
您正在创建以下新的子表单:
一个。没有MaximizeBox,MinimizeBox等,但可能有ControlBox(用于关闭它们)
湾这些儿童表格可以调整或不调整:我们不会在这里考虑其含义。
您希望这些MDIChildForms在MDIParent窗体中显示最大化,但不要隐藏MDIParentForm的菜单。
好的:假设您已经完全设计了所有子窗体,“等待翅膀”:我们可能会在您的MDIParentForm代码中看到这样的代码:
// create instances of your child forms
Form2 f2 = new Form2();
Form3 f3 = new Form3();
Form4 f4 = new Form4();
Form5 f5 = new Form5();
private void MDIParentForm1_Load(object sender, EventArgs e)
{
f2.Text = "subForm1";
f3.Text = "subForm2";
f4.Text = "subForm3";
f5.Text = "subForm4";
f2.MdiParent = this;
f3.MdiParent = this;
f4.MdiParent = this;
f5.MdiParent = this;
f2.Dock = DockStyle.Fill;
f3.Dock = DockStyle.Fill;
f4.Dock = DockStyle.Fill;
f5.Dock = DockStyle.Fill;
f2.Show();
f3.Show();
f4.Show();
f5.Show();
}
此时,停靠样式'填充应用于子窗体将使它们全屏显示,并防止它们模糊MDIParentForm菜单:菜单将允许您自动选择哪一个最前面。
现在,如果你想做更好的东西:比如调整子窗体大小,平铺它们,级联它们。您将不得不更改这些子窗口的“Dock属性”:然后您可以使用内置的MDI范例窗口安排设施,如下所述:How to: Arrange MDI Child Forms
如果您想创建一种预定义子表单的多个实例:How to Create MDI Child Forms ...请参阅有关如何使用“新菜单条目的示例:可能证明有用。
答案 2 :(得分:0)
阅读了Reeds的回答,特别是你的评论:
tabcontrol的问题是,我有一个 每个儿童表格使用的许多控件
也许这会有所帮助:
不要将您的控件放入Winform
。而是将它们封装到UserControl
中(可能已将其继承从Form
更改为UserControl
)。
现在将每个UserControl放在它自己的TabPage上,并将其Dock属性设置为Fill。现在,您可以自己更改每个UserControl,而不会干扰另一个TabPage上的另一个控件(只要您没有在任何连接中构建)。
答案 3 :(得分:0)
如果您打算放弃MDI,可以查看WeifenLuo或DigitalRune等对接框架。这些是免费的,您可以在这里查看其他选项:http://windowsclient.net/downloads/folders/controlgallery/tags/Windows+Forms+Docking+Windows/default.aspx
修改强>
如果我记得很清楚,DigitalRune允许使用Windows窗体作为停靠内容的容器,因此迁移工作量会更小。