如题:我在主窗体中添加了一个mainMenu控件然后在其中一个菜单中写
private void menuItem2_Click(object sender, System.EventArgs e)
{
//打开查询订单窗体
frmSearchOrder fso = new frmSearchOrder();
fso.MdiParent = this;
fso.Show();
}
现在问题是每点击一次就会打开一个窗体
frmSearchOrder打开无数次
主窗体中就有会很多frmSearchOrder
我想怎么点都只打开frmSearchOrder窗体一次

解决方案 »

  1.   

    我的做法是给窗体定义一个变量,创建窗体是给这个变量附一个值,创建新窗体前,遍历下当前所有的窗体
    Form[] mf = this.MdiChildren;
    bool flag = false;
    foreach(Form f in mf)
    {
       if (f.Text == "合同号:" + ContractID)
       {
          flag = true;
          break;
       }
    }
    if(!flag)
    {
    ...
    }
      

  2.   

    http://www.cnblogs.com/Ivan-Yan/archive/2008/07/16/1244435.html
      

  3.   

    用Foreach循环判断打开子窗体的Name属性
    从而判断该子窗体是否已经打开
      

  4.   

    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判断
      

  5.   

    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();
    }
      

  6.   

    MDI父窗体有一個屬性集合MdiChildren,保存的是當前開啟ChildForm,在新的ChildForm開啟時,通過此集合進行判斷就可以了
      

  7.   

    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(); 
    }
    }解决了,交流真好,谢谢大家的回答
      

  8.   

    有个另一种方法先声明窗体的变量
    private Form1 midForm;private void menuItem6_Click(object sender, System.EventArgs e) 
    {
     if(midForm==null||midForm.IsDisposed)
     {
      midForm=new Form1();
     }
     else
     {
      midForm.Activate();
     }
    }