c#中限制MDI子窗体重复打开

求一个非常实用的方法

在打开事件中直接检测是否已经打开此MDI窗体
// 是否已经打开了?(用循环来判断)
foreach (Form childrenForm in this.MdiChildren)
{
//检测是不是当前子窗体名称
if (childrenForm.Name == "子窗体名称")
{
//是的话就是把他显示
childrenForm.Visible = true;
//并激活该窗体
childrenForm.Activate();
return;
}
}
//下面是打开子窗体
Form1 childrenForm = new Form1();
childrenForm.MdiParent = this;
childrenForm.Show();
childrenForm.WindowState = FormWindowState.Maximized;

-------------------------------------------------------
这样也行:
frmPurvey frmp = new frmPurvey();//创建要打开的窗体对象
bool isOpen = true;
foreach (Form frm in this.MdiChildren)//遍历已打开的MDI
{
if (frm.Name == frmp.Name)
{
frmp.Activate();//赋予焦点
frmp.WindowState = FormWindowState.Maximized;//设置窗体最大化
isOpen = false;
break;
}
}
if (isOpen)//如果没有找到相同窗体则打开新窗体
{
frmp.MdiParent = this;//设置父窗体
frmp.Show();
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-09
这个估计挺简单的,如果你是通过菜单来打开 MDI 窗口的话,因为菜单有“选择/不选择”的功能嘛,你可以通过这个功能来确定菜单对应的 MDI 窗口是否已经打开啊。

c#中限制MDI子窗体重复打开
this.MdiChildren)\/\/遍历已打开的MDI { if (frm.Name == frmp.Name){ frmp.Activate();\/\/赋予焦点 frmp.WindowState = FormWindowState.Maximized;\/\/设置窗体最大化 isOpen = false;break;} } if (isOpen)\/\/如果没有找到相同窗体则打开新窗体 { frmp.MdiParent = this;\/\/设置父窗体 frmp....

C#如何避免相同MDI子窗口重复打开
\/\/下面是打开子窗体 Form2 f2 = new Form2();f2.MdiParent = this;f2.Show();} } }

C#中关于子类窗口重复打开的问题
窗体有个属性AcceotButton你把它关联到,你的控件就可以了,关于窗体代开问题,你可以家判断,如果本窗体已经打开,则不能再次打开 foreach (Form. childrenForm. in this.MdiChildren){ \/\/检测是不是当前子窗体名称 if (childrenForm.Name == "子窗体名称"){ \/\/是的话就是把他显示 childrenForm....

如何使MDI子窗体不重复被打开
有很多朋友希望MDI子窗体不重复被打开,如果子窗体已经被创建了,则把它激活,而不是又创建了一个MDI子窗体,其实中C#提供的MdiChildren这个属性就可以解决这个问题,下面假设一个treeview控件,点击treeview上面的相应结点,就会创建以这个结点命名的MDI子窗体,若是子窗体已经被创建,则把它激活,显示在所...

我用c#建立一个mdi窗体,在其中显示一个子窗体。每次点按钮都显示一个...
点击以后,把按钮设为不可用,倒子窗口关闭时,再将它改回来。如果你是用按钮打开字窗口,应该这样设置:假设这个按钮名称为button1 1、将button1的Modifiers设置为Public 2、在该按钮的CLICK事件中加一句:button1.Enabled = false;3、子窗口的FormClosing事件这样编写:private void Form1_FormClosing(...

C#中再次打开已打开子窗体时如何使其置前?
第一种解决方式:点击完查询弹出子窗口后就使得查询按钮不可用,关闭该查询窗口后再恢复按钮可用状态 第二种方式:借助全局变量,打开查询窗口后保存成全局变量,第二次的时候就判断是否为null,每次关闭后设置为null,然后窗口是具备设置为显示窗口的属性的(具体的不记得了你点来看一下嘛)就能置于前了 ...

C#中再次打开已打开子窗体时如何使其置前?
用一个变量表示新建的子窗体,比如 mdiFrm(这个变量通常是其MDI父窗体的成员变量,因为要在父窗体中点击按钮的时候访问他)。然后根据它的相关属性,来确定是否应该新创建窗体。使用 BringToFront 把一个窗体显示在前端(这个和 TopMost 是不一样的,后者是一直顶端显示)。思想如下伪代码所示:if (mdi...

C#中关于mdi子窗口打开另一个mdi子窗口的问题!
怎么可能,我肯定你没有认真的去尝试 在main窗体里面:设置父窗体是:frm1.MdiParent=this;而在frm2里面设置frm1的父窗体是:frm1.MdiParent=this.MdiParent;十有八九这里大意了!!!写程序切忌心浮气躁。

C# 中如何实现menuStrip菜单栏中ToolStripMenuItem勿点击多次
MdiParentForm.MdiChildren[i].Activate();return true;} } \/\/如果没有相同的值则表示要调用的子窗体还没有被打开,返回false值 return false;} \/\/调用 if (!ShowChildForm(myForm.Text, this)){ myForm.MdiParent = this;myForm.WindowState = FormWindowState.Maximized;myForm.Show();} else...

C#中如何设置多级继承窗体
如果 Form1是MDI父窗口,Form2是MDI子窗体同时 Form3也被设置为MDI子窗体,那么,Form3就不能再作为Form2的子窗口了;(会出你提到的错误)如果需要Form3作为Form2的子窗口,首先取消Form3的MDI子窗体设置,然后在Form2的代码中 Form3 f3 = new Form3();f3.show(this);

相似回答