C#MDI窗体避免重复打开子窗体的问题
程序员文章站
2022-06-10 13:07:47
...
在做winform程序的时候,需要用到MDI窗体,在网上看了一些避免子窗体重复打开的问题。
现在我有一个MDI窗体formfather以及两个子窗体form1和form2。
在父窗体上弄两个按钮,点击按钮1的时候显示form1,点击按钮2的时候显示form2,再一次点击的时候显示form1,而不是一个新的form1。
下面是我的代码
private void toolStripButton1_Click(object sender, EventArgs e)
{
Form1 f1 = new Form1();
bool isOpened = false;//定义子窗体打开标记,默认值为false
foreach (Form f in this.MdiChildren)//循环MDI中的所有子窗体
{
if (f1.Name == f.Name)//若该子窗体已被打开
{
f.Activate();//**该窗体
isOpened = true;//设置子窗体的打开标记为true
f1.Dispose();//销毁formChild实例
break;
}
}
if (!isOpened)//若该子窗体未打开,则显示该子窗体
{
f1.MdiParent = this;
f1.FormBorderStyle = FormBorderStyle.None;//设置子窗体无边框
f1.Dock = DockStyle.Fill;//设置子窗体填满MDI窗体
f1.Show();
}
private void toolStripButton2_Click(object sender, EventArgs e)
{
Form2 df = new Form2 ();
bool isOpened = false;//定义子窗体打开标记,默认值为false
foreach (Form f in this.MdiChildren)//循环MDI中的所有子窗体
{
if (df.Name == f.Name)//若该子窗体已被打开
{
f.Activate();//**该窗体
isOpened = true;//设置子窗体的打开标记为true
df.Dispose();//销毁formChild实例
break;
}
}
if (!isOpened)//若该子窗体未打开,则显示该子窗体
{
df.MdiParent = this;
df.FormBorderStyle = FormBorderStyle.None;
df.Dock = DockStyle.Fill;
df.Show();
}
}
看别人的代码在代码块写**窗体时用的是f1.Activate,这样是无法成功再次**得窗体的,后来想了下,可能因为f1是new的窗体,而我们要打开的应该是已经是已经存在的f1窗体,即是我们foreach到的f窗体才是。
自己的想法,不知道对不对,记录在此供自己以后查看,也希望大家指正
。
上一篇: 【MVC架构】Razor语法