3

我已将窗体设置为 MDI 窗体的子窗体,该窗体的 WindowState 设置为最大化。

当我从 MDI 容器打开该表单时,它不会以最大化状态打开。为什么会发生这种情况,我怎样才能使其最大化打开?

这就是我从 mdi 容器中显示子表单的方式。

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.WindowState = FormWindowState.Maximized;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
}
4

14 回答 14

11

找到了解决这个问题的最佳方法。只需使用两行:

frm r = new frm();
r.MdiParent = this;
r.Show();
r.WindowState = FormWindowState.Minimized;
r.WindowState = FormWindowState.Maximized;

事实证明,如果先将表单最小化,然后再最大化,就可以获得所需的结果!

于 2013-03-17T10:40:14.473 回答
5

框架中确实存在错误。如果您从 GUI 将 WindowState 设置为 Maximized,则框架似乎会感到困惑。你最终会在最大化和默认大小之间的某个地方出现一个奇怪的状态。

混合 MdiChild 状态的图像

使用这样的 WindowState 设置,在代码中对其进行更正的尝试将被忽略。下面的代码产生了上面的图像。

private void ShowNewForm(object sender, EventArgs e)
    {
        Form1 childForm = new Form1();
        childForm.MdiParent = this;
        childForm.Text = "Window " + childFormNumber++;
        childForm.Show();
        childForm.WindowState = FormWindowState.Maximized;
    }

对 ShowNewForm() 的后续调用将正确显示,但第一个孩子将始终表现出此行为。

只需在 GUI 中将 WindowState 恢复为正常状态,然后使用代码将窗体最大化,如上述代码所示。

我的版本:
C# Express 10.0.40219.1 SP1
.NET 4.0.30319 SP1

于 2013-07-05T17:55:48.103 回答
3

我发现,如果另一个可见表单调用第二个 MIDChild 并设置文本,那么 MDIChild 就会失去对其 WindowState 的跟踪。

尝试注释掉

childForm.Text = "Window " + childFormNumber++;

看看是否能解决你的问题。对我来说看起来像一个框架错误。

于 2011-09-04T16:46:49.727 回答
2

表单必须首先显示,然后最大化!

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
    childForm.WindowState = FormWindowState.Maximized;
}
于 2014-06-14T01:29:23.650 回答
2

选择您的子窗体按 F4 并将 WindowState 设置为正常

如果你想最大化孩子,你必须将表单属性设置为正常

并编写如下代码:

FormChild childForm = new FormChild ();
childForm.MdiParent = this;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;
于 2014-12-21T19:20:07.627 回答
2

您可以尝试以下方法:

  form1 obj = new form1 ();

  obj.MdiParent = MDIGracular.ActiveForm;

  obj.StartPosition = FormStartPosition.CenterParent;

  obj.WindowState = FormWindowState.Minimized;

  obj.Dock = DockStyle.Fill;

  obj.Show();

  obj.WindowState = FormWindowState.Maximized;
于 2016-10-14T13:13:39.023 回答
1

我找到了另一个解决方案。首先,将 System.Windows.Forms.Panel 元素添加到表单中。设置属性

this.root.Dock = System.Windows.Forms.DockStyle.Fill;

然后,所有其他控件都位于面板内。在这种情况下,FormWindowState.Maximized 可以在任何地方设置并且工作合理。

于 2021-08-22T08:48:08.513 回答
1

我终于找到了解决方案,它对我来说是正确的。这是我们在处理 MDI 窗体时框架的问题,我们不能仅通过将 WindowState 属性更改为最大化来解决这个问题。我们需要编写以下代码:

代码:Form1 form=新Form1 form.Dock=DockStyle.Fill;

此 Dock 属性将最大化 MDIForm 下的子窗体,并确保所有子窗体的 WindowState 属性都应为 Normal。

于 2020-07-19T16:23:07.037 回答
0
FormChild childForm = new FormChild ();
childForm.MdiParent = this;

childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childform.BringToFront();
childForm.WindowState = FormWindowState.Maximized;

希望它会有所帮助

于 2013-02-18T07:44:02.397 回答
0

忽略在设计模式下设置 WindowState (Properties-->WindowsState-->Maximized)

然后在显示表格后:

childForm.WindowState=FormWindowState.Maximized;

我的版本:

  • 视觉工作室 2010
  • .NET 3.5
于 2014-08-13T18:33:55.313 回答
0

这很简单。

在子表单加载事件中编写代码:

this.WindowState = FormWindowState.Maximized;
于 2014-01-06T07:56:07.260 回答
0

在您的childForm属性中,将Windows State属性设置为Normal。然后,在childForm Load方法中添加以下行:

this.WindowState = FormWindowState.Maximized;
于 2015-11-09T12:55:29.777 回答
0

我有同样的问题,我发现的一切都无济于事。我有一个父(主)窗口和几个子窗口。当子窗口关闭时,它会被隐藏并在再次打开时被激活。

无论我尝试了什么,当隐藏的子窗口再次被激活时,它处于半最大化状态,而没有其他子窗口打开。如果曾经隐藏和激活的窗口设置为正常状态,则其栏将显示在父窗口的后面。

现在我发现,这只发生在子窗口隐藏在最大化状态时。因此,在窗口被隐藏之前,我在 FormClosing 事件中将 WindowState 设置为 Normal,并且一切都按预期工作。

于 2015-07-29T13:34:09.860 回答
0

我想我现在知道了,为什么你必须设置

childForm.WindowState=FormWindowState.Maximized;

childForm.Show();

当您将窗体设置为最大化时,它会使用它获得的所有空间,因此普通窗体最大化到整个屏幕,MDI 子窗体最大化到 MDI 父窗体内的指定空间。但是这个可用空间是用“show”命令设置的。因此,如果您在“显示”命令之前将子窗体的窗口状态设置为最大化,它根本不知道它可以得到多大,因此以窗口状态“正常”的大小显示,否则它是一个最大化的表单.

让 MDI 子窗体始终正确打开且不会过多闪烁的唯一方法是在“显示”命令之前将其设置为另一个窗口状态,并在显示后将其最大化。

于 2016-01-13T10:58:32.050 回答