0

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

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

4

4 回答 4

3

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

MDI 表单有很多可用性问题,这就是它们不再常用的原因,并且往往被其他控件/选项替换。

于 2010-02-17T01:46:28.490 回答
3

这是基于使用 MDI“父表单和子表单范例”的答案,并具有以下假设:

  1. 您的 MDIParentForm 上有一个 MenuStrip 控件 'Dock = 'Top,并且您已经实现了自动 MDI &Window 菜单处理程序,如:如何:使用 MenuStrip 创建 MDI 窗口列表

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

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

    湾。这些子表单可以调整大小或不可调整:我们不会在这里考虑它的含义。

  3. 您希望这些 MDIChildForms 在 MDIParent Form 中最大化显示,但不要遮挡 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 菜单:并且该菜单将允许您自动选择哪个是最前面的。

现在,如果你想做一些更有趣的事情:比如调整子窗体的大小、平铺它们、级联它们。您将不得不更改这些子窗口的“停靠”属性:然后您可以使用内置的 MDI 范例窗口排列工具,如下所述:如何:排列 MDI 子窗体

如果您想创建一种类型的预定义子表单的多个实例:如何创建 MDI 子表单...请参阅有关如何使用“新菜单条目”的示例:可能会很有用。

于 2010-02-17T09:12:04.357 回答
0

在阅读了 Reeds 的回答,尤其是您的评论后:

tabcontrol 的问题是,我每个子表单使用了很多控件

也许这会有所帮助:不要将控件放入Winform. 而是将它们封装成 a UserControl(也许它已经通过将继承从 更改为Form来工作UserControl)。

现在将每个 UserControl 放在它自己的 TabPage 上,并将其 Dock 属性设置为 Fill。现在您可以自己更改每个 UserControl,而不会干扰另一个 TabPage 上的另一个控件(只要您没有建立任何连接)。

于 2010-02-17T09:42:29.283 回答
0

如果你打算放弃 MDI,你可以看看WeifenLuoDigitalRune 之类的对接框架。这些是免费的,对于其他选项,您可以在这里查看:http: //windowsclient.net/downloads/folders/controlgallery/tags/Windows+Forms+Docking+Windows/default.aspx


编辑:

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

于 2010-02-17T09:57:04.757 回答