如题:我在主窗体中添加了一个mainMenu控件然后在其中一个菜单中写
private void menuItem2_Click(object sender, System.EventArgs e)
{
//打开查询订单窗体
frmSearchOrder fso = new frmSearchOrder();
fso.MdiParent = this;
fso.Show();
}
现在问题是每点击一次就会打开一个窗体
frmSearchOrder打开无数次
主窗体中就有会很多frmSearchOrder
我想怎么点都只打开frmSearchOrder窗体一次
private void menuItem2_Click(object sender, System.EventArgs e)
{
//打开查询订单窗体
frmSearchOrder fso = new frmSearchOrder();
fso.MdiParent = this;
fso.Show();
}
现在问题是每点击一次就会打开一个窗体
frmSearchOrder打开无数次
主窗体中就有会很多frmSearchOrder
我想怎么点都只打开frmSearchOrder窗体一次
Form[] mf = this.MdiChildren;
bool flag = false;
foreach(Form f in mf)
{
if (f.Text == "合同号:" + ContractID)
{
flag = true;
break;
}
}
if(!flag)
{
...
}
从而判断该子窗体是否已经打开
{
Form2 ff2 =f as Form2;
if(ff2!=null)
{
if(ff2.l==l)
{
ff2.Show();
return;
}
}
}
Form2 f2 = new Form2(id);
f2.MdiParent = this;
f2.Show();
这个可以的试试每次调用给其不同的ID然后跟据ID判断
bool openFlage=false;//标识窗体是否打开(true:已打开了一个窗体)
foreach (Form fr in mdiForm)
{
if (fr.Name=="ProdTableColumnsInfoMag")
{//已打开一个窗体则激活并显示出来
fr.Activate();
openFlage=true;
break;
}
}
if (!openFlage)
{//没有打开窗体则新建并显示出来
Yj_SystemMang.ProdTableColumnsInfoMag nPTCIM=new Yj_SystemMang.ProdTableColumnsInfoMag(false);
nPTCIM.MdiParent=this;
nPTCIM.Show();
}
{
System.Windows.Forms.Form[] mdiForm=this.MdiChildren;
bool openFlage=false;//标识窗体是否打开(true:已打开了一个窗体)
foreach (Form fr in mdiForm)
{
//MessageBox.Show(fr.Name);
if (fr.Name=="frmSearchOrder")
{//已打开一个窗体则激活并显示出来
fr.Activate();
openFlage=true;
break;
}
}
if (!openFlage)
{//没有打开窗体则新建并显示出来
frmSearchOrder nPTCIM=new frmSearchOrder();
nPTCIM.MdiParent=this;
nPTCIM.Show();
}
}解决了,交流真好,谢谢大家的回答
private Form1 midForm;private void menuItem6_Click(object sender, System.EventArgs e)
{
if(midForm==null||midForm.IsDisposed)
{
midForm=new Form1();
}
else
{
midForm.Activate();
}
}