C#MDI孩子在运行时改变大小?

时间:2017-11-13 20:21:43

标签: c# winforms mdi

基本上我有一个MDI Parent窗口,它作为MDI Child运行我的MainMenu窗体,从主菜单我可以打开其他窗体。我有MainMenu,然后将MDI Parent调整为MDI Child表单的大小。 这很有效,但问题是当我回到MainMenu表单时,由于某种原因,size属性已更改为我打开的任何形式。

    private void MDI_MdiChildActivate(object sender, EventArgs e)
    {
        try
        {
            this.ClientSize = this.ActiveMdiChild.Size;
            this.CenterToScreen();
        }
        catch { }
    }

这是调整MDI Parent大小的代码。

我不是在询问如何获得父或子表格的大小,我的代码在某种程度上工作得很好。问题是MainMenu size属性在运行时更改,尽管我从未改变MainMenu的大小。 MainMenu表单不是MDI Parent,也是孩子。

1 个答案:

答案 0 :(得分:0)

要使窗口与Mdi父级一样大,您应该将Mdi子项的FormState设置为最大化。

另外,为什么在激活MDI子项时修改大小?为什么不在创建MDI子项时将其设置为最大化,如下所示:

private void button1_Click(object sender, EventArgs e)
{
    Form2 f = new Form2();

    f.MdiParent = this;
    f.WindowState = FormWindowState.Maximized;

    f.Show();                
}

如果您希望一次只能看到一个MDI子项,请确保隐藏其他子项。 你可以像这样做:

private Form2 _f2;
private Form3 _f3;

private void open1ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (_f2 == null)
    {
        _f2 = new Form2();
    }

    ShowForm(_f2);
}

private void open2ToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (_f3 == null)
    {
        _f3 = new Form3();
    }
    ShowForm(_f3);
}

private void ShowForm(Form f)
{

    var otherWindows = this.MdiChildren.Where(child => child != f);

    foreach (var o in otherWindows)
    {
        o.Hide();
    }

    f.MdiParent = this;
    f.WindowState = FormWindowState.Maximized;

    f.Show();
}

请注意,您还可以选择关闭其他表单,具体取决于其中的内容以及是否需要保存等等...