【发布时间】:2015-02-06 15:23:12
【问题描述】:
我有 Form1 和 2 个单选按钮(rb1 和 rb2)和一个普通按钮(btn)。当我单击btn 时,我应该打开Form2,如果选中rb1,则作为Form1 的MDI 子级,或者如果选中rb2,则作为普通Dialog。另外,任何时候都只能打开一个Form2。
这是我的代码:
public partial class Form1 : Form
{
Form2 f2;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (f2 != null)
{
MessageBox.Show("Close form!");
return;
}
f2 = new Form2();
if (radioButton1.Checked == true)
{
this.IsMdiContainer = true;
f2.MdiParent = this;
f2.Show();
}
else
{
f2.Show();
}
f2.FormClosed += f2_FormClosed;
}
void f2_FormClosed(object sender, FormClosedEventArgs e)
{
this.IsMdiContainer = false;
f2 = null;
}
}
除非我将Form2 最大化为MDI 子级然后关闭它,否则一切正常。之后屏幕保持不变(因为我什至没有关闭Form2)但我可以打开新的Form2,然后Form1的标题是“Form1 - [Form2]”,如果我重复这个过程它将是“Form1 - [Form2] - [Form2]”等。
我发现我的f2_FormClosed 方法应该是
void f2_FormClosed(object sender, FormClosedEventArgs e)
{
f2.Hide(); // <<<<<<<<-----------NEW
this.IsMdiContainer = false;
f2 = null;
}
但我不知道为什么; Form2应该被关闭,我不知道为什么要隐藏它?!
谢谢!
【问题讨论】:
-
在创建窗口的窗体上更改 IsMdiContainer 属性有许多副作用。不要这样做。
标签: c# winforms mdi mdichild maximize-window