Windows MDI子窗体无法在WIndow最大化状态下打开

时间:2010-09-09 14:23:27

标签: c# mdichild windowstate

我已将表单设置为MDI表单的子表单,其窗口状态设置为最大化。

当我从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();
}

13 个答案:

答案 0 :(得分:9)

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

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

事实证明,如果首先将表格最小化,然后最大化,则获得所需的结果!

答案 1 :(得分:3)

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

尝试发表评论

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

并查看是否可以解决您的问题。看起来像是一个框架错误。

答案 2 :(得分:3)

框架中确实存在错误。如果您从GUI将WindowState设置为Maximized,那么框架似乎会变得混乱。最终在最大化和默认大小之间出现奇怪的状态。

Image of mixed MdiChild state

使用这样设置的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

答案 3 :(得分: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;
}

答案 4 :(得分:2)

选择您的孩子表单按F4并将WindowState设置为正常

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

并编写如下代码:

FormChild childForm = new FormChild ();
childForm.MdiParent = this;
childForm.Show();
childForm.WindowState = FormWindowState.Maximized;

答案 5 :(得分:1)

您可以尝试以下操作:

  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;

答案 6 :(得分:0)

FormChild childForm = new FormChild ();
childForm.MdiParent = this;

childForm.Text = "Window " + childFormNumber++;
childForm.Show();
childform.BringToFront();
childForm.WindowState = FormWindowState.Maximized;
希望它会有所帮助

答案 7 :(得分:0)

很简单。

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

this.WindowState = FormWindowState.Maximized;

答案 8 :(得分:0)

忽略在设计模式下设置WindowState(属性 - > WindowsState - >最大化)

然后在show form之后:

childForm.WindowState=FormWindowState.Maximized;

我的版本:

  • Visual Studio 2010
  • .NET 3.5

答案 9 :(得分:0)

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

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

现在我发现,只有当子窗口隐藏在最大化状态时才会发生这种情况。因此,在隐藏窗口之前,我在FormClosing事件中将WindowState设置为Normal,并且所有窗口都按预期工作。

答案 10 :(得分:0)

childForm媒体资源中,将Windows State媒体资源设为Normal。然后,在childForm Load方法中添加以下行:

this.WindowState = FormWindowState.Maximized;

答案 11 :(得分:0)

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

childForm.WindowState=FormWindowState.Maximized;

childForm.Show();

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

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

答案 12 :(得分:0)

我终于找到了解决方案,它正在为我正确地工作。当我们处理MDI Form时,这就是Framework的问题,我们不能仅通过将WindowState属性更改为最大化来解决此问题。我们需要编写以下代码:

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

此Dock属性将最大化MDIForm下的子表单,并确保所有子表单的WindowState属性均应为Normal。

相关问题