我看到两个错误:
1、if (f.GetType()=typeof(FormName))这是一个付值语句,而这里应该是条件语句,少个“=”;
2、ff.MdiParent = this;这里的ff没有定义,是不是应该是f.MdiParent = this;

解决方案 »

  1.   

    逻辑大有问题
    if (f.GetType()=typeof(FormName))
    如果f是主窗口的mdichildren,那么f的mdiparent必然是主窗口,下面的语句多此一举
    如果不是,而主窗口有n个类型不是FormName的子窗口的话,else语句会创建n个类型是FormName的子窗口,搞不好会死循环也说不定应该在foreach里面对类型是FormName的窗体计数,如果是0则添加一个类型是FormName的子窗体,否则就什么也不作
      

  2.   

    bool IsShowed = false;
    foreach(Form frm in this.MdiChildren)
    {
        if(frm.GetType()== typeof(FormName))
        {
            frm.Active();
            IsShowed = true;
            break;
        }
    }
    if(!IsShowed)
    {
       FormName ff = new FormName();
       ff.MdiParent = this;
       ff.Show();
    }
      

  3.   

    我的程序改了一下还是不对啊 :
    提示:找不到类型或命名空间名称“FormName”(是否缺少 using 指令或程序集引用?) private void ShowMdiForm(Form FormName) {
    if (this.MdiChildren.Length==0)
    {     FormName ff = new FormName();
    ff.MdiParent = this;
    ff.Show();
    return;
    }
    foreach(Form f in this.MdiChildren)
    {
    if (f.GetType()==typeof(FormName))
    {

    //f.MdiParent = this;
    f.Show();
    }
    else
    {
    FormName ff = new FormName();
    ff.MdiParent = this;
    ff.Show();

    }
    }

    }
      

  4.   

    if (f.Name.ToString() == FormName)或
    if(f.GetType().ToString()==FormName.GetType().ToString())试试
      

  5.   

    试试下面我得代码
    private void menuItemAdviceSent_Click(object sender, System.EventArgs e)
    {
    if(FormIsOpen("frmAdviceSend"))return;
    frmAdviceSend frm=new frmAdviceSend();
    frm.ShowDialog();
    }private bool FormIsOpen(string sFormName)
    {
    bool bFormIsOpen=false;
    for(int k=0;k<this.MdiChildren.Length ;k++ )
    {
    if (this.MdiChildren[k].Name.ToString()==sFormName)
    {
    this.MdiChildren[k].Activate();
    bFormIsOpen=true;
    break;
    }
    }
    if(bFormIsOpen)
    {
    this.ActiveMdiChild.WindowState =System.Windows.Forms.FormWindowState.Normal ;  
    this.ActiveMdiChild.Activate();
    return  bFormIsOpen;
    }
    else return false; }
      

  6.   

    我一般是这么做
    在子窗体类中添加以下代码,并且原构造函数由public -> protected窗体类中的代码:private static frmEditMap mInstance = null;
    //单例模式创建以及维护窗体类,mInstance为其单一实例,通过Instance属性得到该实例对象
    //在窗体的closed事件中将mInstance重置
    //原构造函数由public -> protected
    public  static frmSample Instance

    get
    {
    if( mInstance == null )
    {
    mInstance = new frmSample();
    }
    return mInstance;
    }
    }然后通过以下代码调用:frmSample frm = frmSample.Instance;
    frm.ShowDialog();最后在close事件中
    Instance = null;
      

  7.   

    UP UP UP UP UP ...
      

  8.   

    xian现在仍然没有一个答案符合条件:解决的方案也只是将窗体显示;如何 写一个通用的show函数只创建一个窗体的实例那 ?如何 写一个通用的show函数只创建一个窗体的实例那 ?
    如何 写一个通用的show函数只创建一个窗体的实例那 ?