在Winform程序中, 如何让任一个MDI子窗体只打开一次

zryStar 2008-07-24 03:47:01
如题:我在主窗体中添加了一个mainMenu控件然后在其中一个菜单中写
private void menuItem2_Click(object sender, System.EventArgs e)
{
//打开查询订单窗体
frmSearchOrder fso = new frmSearchOrder();
fso.MdiParent = this;
fso.Show();
}
现在问题是每点击一次就会打开一个窗体
frmSearchOrder打开无数次
主窗体中就有会很多frmSearchOrder
我想怎么点都只打开frmSearchOrder窗体一次
...全文
405 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
assky124 2008-07-24
  • 打赏
  • 举报
回复
有个另一种方法

先声明窗体的变量
private Form1 midForm;

private void menuItem6_Click(object sender, System.EventArgs e)
{
if(midForm==null||midForm.IsDisposed)
{
midForm=new Form1();
}
else
{
midForm.Activate();
}
}
zryStar 2008-07-24
  • 打赏
  • 举报
回复
private void menuItem6_Click(object sender, System.EventArgs e)
{
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();
}
}

解决了,交流真好,谢谢大家的回答
cjnet 2008-07-24
  • 打赏
  • 举报
回复
MDI父窗体有一個屬性集合MdiChildren,保存的是當前開啟ChildForm,在新的ChildForm開啟時,通過此集合進行判斷就可以了
yjvjom 2008-07-24
  • 打赏
  • 举报
回复
System.Windows.Forms.Form[] mdiForm=this.MdiChildren;
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();
}
wuhaojun135 2008-07-24
  • 打赏
  • 举报
回复
foreach(Form f in this.MdiChildren)
{
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判断
zryStar 2008-07-24
  • 打赏
  • 举报
回复
呵呵,俺试试楼上的做法
pp_shy 2008-07-24
  • 打赏
  • 举报
回复
用Foreach循环判断打开子窗体的Name属性
从而判断该子窗体是否已经打开
fengyuan 2008-07-24
  • 打赏
  • 举报
回复
我的做法是给窗体定义一个变量,创建窗体是给这个变量附一个值,创建新窗体前,遍历下当前所有的窗体
Form[] mf = this.MdiChildren;
bool flag = false;
foreach(Form f in mf)
{
if (f.Text == "合同号:" + ContractID)
{
flag = true;
break;
}
}
if(!flag)
{
...
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧