基本上我有一个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,也是孩子。
答案 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();
}
请注意,您还可以选择关闭其他表单,具体取决于其中的内容以及是否需要保存等等...