如何让子窗体只能同时打开一个而不是多个?
16 个解决方案
#1
bool bOpen = false;
foreach (Form frmOpen in this.MdiChildren)
{
if (frmOpen.Name == frmForm1.Name)
{
frmOpen.Activate();
frmOpen.WindowState = FormWindowState.Maximized;
bOpen = true;
break;
}
}
if (bOpen == false)
{
frmForm1.MdiParent = this;
frmForm1.Show();
frmForm1.WindowState = FormWindowState.Maximized;
}
foreach (Form frmOpen in this.MdiChildren)
{
if (frmOpen.Name == frmForm1.Name)
{
frmOpen.Activate();
frmOpen.WindowState = FormWindowState.Maximized;
bOpen = true;
break;
}
}
if (bOpen == false)
{
frmForm1.MdiParent = this;
frmForm1.Show();
frmForm1.WindowState = FormWindowState.Maximized;
}
#2
楼上的方法很好!以前也都是这样处理的!
#3
不赞同1L 还要循环
#4
系统设置_Click:
if (this.ActiveMdiChild == null)
{
XXX X=new XXX();X.Show();
}
else
{
MessageBox.Show("只能打开一个", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
#5
private void button1_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)
{
if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
}
#6
用一个List保存所有打开的窗口的名字
List<string> listForm = new List<string>();
//每次打开窗体前检查
if (listForm.Contains("Form1"))
{
MessageBox.Show("Form1窗体已经打了");
return;
}
else
{
Form f = new Form();
f.Name = "";
listForm.Add(f.Name);
f.Show();
}
#7
问一下,这些代码要写在父窗口的 哪个事件中啊?还是建个类放在里面?
#8
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
你原来MDI主窗口中执行上面代码的位置
用下面代码替换
frm2.MdiParent = this;
frm2.Show();
你原来MDI主窗口中执行上面代码的位置
用下面代码替换
foreach (Form frm in this.MdiChildren)
{
if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
#9
楼主,你搞错了,你定义了局部变量所以每点一次就实例化一个,也就是 xx a=new xx();所以为了你可以每次只能点一个窗口出来,你可以在方法外面定义一个xx a=new xx();然后在方法里面写a.show();还有一个办法是不要a.show(),而是a.shoudialog();
#10
为什么我有的子窗体设置成初始化时是最大,但是有的没有初始化最大,当打开时还是变成最大啊?
#11
foreach(form frm in MDICHILDFORM)
{
if(frm is Form1)
frm.active();
else
{
Form1 frm1=new form1();
frm1.show();
}
}
好象可以的
{
if(frm is Form1)
frm.active();
else
{
Form1 frm1=new form1();
frm1.show();
}
}
好象可以的
#12
忘写这行了
frm1.MdiParent = this;
frm1.MdiParent = this;
#13
1楼就可以啊,弄那么复杂干嘛?
6楼用一个List保存打开的窗口,不麻烦吗?这样每次关闭窗口的时候还要从List中移除打开的窗口,个人觉得麻烦。1楼的方法简单可行!
6楼用一个List保存打开的窗口,不麻烦吗?这样每次关闭窗口的时候还要从List中移除打开的窗口,个人觉得麻烦。1楼的方法简单可行!
#14
9楼的方法最好用 赞一个
#15
正遇到这个问题。看看~~
#16
如何打开新的子窗口自动关闭旧的子窗口呢?
#1
bool bOpen = false;
foreach (Form frmOpen in this.MdiChildren)
{
if (frmOpen.Name == frmForm1.Name)
{
frmOpen.Activate();
frmOpen.WindowState = FormWindowState.Maximized;
bOpen = true;
break;
}
}
if (bOpen == false)
{
frmForm1.MdiParent = this;
frmForm1.Show();
frmForm1.WindowState = FormWindowState.Maximized;
}
foreach (Form frmOpen in this.MdiChildren)
{
if (frmOpen.Name == frmForm1.Name)
{
frmOpen.Activate();
frmOpen.WindowState = FormWindowState.Maximized;
bOpen = true;
break;
}
}
if (bOpen == false)
{
frmForm1.MdiParent = this;
frmForm1.Show();
frmForm1.WindowState = FormWindowState.Maximized;
}
#2
楼上的方法很好!以前也都是这样处理的!
#3
不赞同1L 还要循环
#4
系统设置_Click:
if (this.ActiveMdiChild == null)
{
XXX X=new XXX();X.Show();
}
else
{
MessageBox.Show("只能打开一个", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
#5
private void button1_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)
{
if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
}
#6
用一个List保存所有打开的窗口的名字
List<string> listForm = new List<string>();
//每次打开窗体前检查
if (listForm.Contains("Form1"))
{
MessageBox.Show("Form1窗体已经打了");
return;
}
else
{
Form f = new Form();
f.Name = "";
listForm.Add(f.Name);
f.Show();
}
#7
问一下,这些代码要写在父窗口的 哪个事件中啊?还是建个类放在里面?
#8
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
你原来MDI主窗口中执行上面代码的位置
用下面代码替换
frm2.MdiParent = this;
frm2.Show();
你原来MDI主窗口中执行上面代码的位置
用下面代码替换
foreach (Form frm in this.MdiChildren)
{
if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
#9
楼主,你搞错了,你定义了局部变量所以每点一次就实例化一个,也就是 xx a=new xx();所以为了你可以每次只能点一个窗口出来,你可以在方法外面定义一个xx a=new xx();然后在方法里面写a.show();还有一个办法是不要a.show(),而是a.shoudialog();
#10
为什么我有的子窗体设置成初始化时是最大,但是有的没有初始化最大,当打开时还是变成最大啊?
#11
foreach(form frm in MDICHILDFORM)
{
if(frm is Form1)
frm.active();
else
{
Form1 frm1=new form1();
frm1.show();
}
}
好象可以的
{
if(frm is Form1)
frm.active();
else
{
Form1 frm1=new form1();
frm1.show();
}
}
好象可以的
#12
忘写这行了
frm1.MdiParent = this;
frm1.MdiParent = this;
#13
1楼就可以啊,弄那么复杂干嘛?
6楼用一个List保存打开的窗口,不麻烦吗?这样每次关闭窗口的时候还要从List中移除打开的窗口,个人觉得麻烦。1楼的方法简单可行!
6楼用一个List保存打开的窗口,不麻烦吗?这样每次关闭窗口的时候还要从List中移除打开的窗口,个人觉得麻烦。1楼的方法简单可行!
#14
9楼的方法最好用 赞一个
#15
正遇到这个问题。看看~~
#16
如何打开新的子窗口自动关闭旧的子窗口呢?