有关设置Windows窗体窗口的窗口状态的提示

时间:2010-02-17 01:41:15

标签: c# winforms mdiparent

我有一个打开MDI子窗体的Windows窗体应用程序。当我选择这些表单时,我需要将其windowstate设置或渲染为Maximized。问题是,当我在打开的表单之间导航时,它会恢复到正常的窗口状态,当我将窗口状态再次设置为最大化时,它会显示从正常状态到最大化状态的转换,并且看起来不太好。

如何创建具有MDI父窗体的Windows应用程序,该窗体以最大化窗口状态打开许多MDI子窗口?

4 个答案:

答案 0 :(得分:3)

如果您希望窗口状态始终最大化,我建议您远离MDI表单。在这种情况下,TabControl可能会更好地工作。

MDI表单存在相当多的可用性问题,这就是为什么它们不再常用,并且往往被其他控件/选项替换。

答案 1 :(得分:3)

这是基于使用MDI“父表格和子表格范例”的答案,其中包含以下假设:

  1. 你的MDIParentForm上有一个MenuStrip控件'Dock ='Top,你已经实现了自动MDI& Window菜单处理程序,如下所述:How to: Create an MDI Window List with MenuStrip

  2. 您正在创建以下新的子表单:

    一个。没有MaximizeBox,MinimizeBox等,但可能有ControlBox(用于关闭它们)

    湾这些儿童表格可以调整或不调整:我们不会在这里考虑其含义。

  3. 您希望这些MDIChildForms在MDIParent窗体中显示最大化,但不要隐藏MDIParentForm的菜单。

  4. 好的:假设您已经完全设计了所有子窗体,“等待翅膀”:我们可能会在您的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,可以查看WeifenLuoDigitalRune等对接框架。这些是免费的,您可以在这里查看其他选项:http://windowsclient.net/downloads/folders/controlgallery/tags/Windows+Forms+Docking+Windows/default.aspx


修改

如果我记得很清楚,DigitalRune允许使用Windows窗体作为停靠内容的容器,因此迁移工作量会更小。