问个菜菜问题,在父窗体点击按钮显示子窗体,用Show()(不是ShowDialog())怎么控制按钮使子窗体不重复显示。

解决方案 »

  1.   

    单件模式
      public partial class Form1 : Form
        {
            private void button1_Click(object sender, EventArgs e)
            {
                Form2.ShowChildForm();
            }
        } public partial class Form2 : Form
        {
            private static Form2 formInstance;        public static Form2 Instance 
            {
                get 
                {
                    if(formInstance == null)
                    {
                        formInstance = new Form2();
                    }
                    return formInstance;
                }
              
            }        public static void ShowChildForm()
            {
                if(!Instance.Visible)
                {
                    Instance.Show();
                }
            }
        }
      

  2.   

    在当前窗体设置一个子窗体的字段为 subForm(子窗体类为SubForm)
    button1_Click(..)
    {
       if(subForm == null)
       {
          SubForm subForm = new SubForm();
          subForm.Show();
       }
    }
      

  3.   


    else
    {
       subForm.Show();
    }
      

  4.   

    先定义类:
    public class SingleForm
        {
            private static YourForm _YourForm;
            public static YourForm GetYourForm
            {    
              set{ _YourForm=value;}
              get{ return _YourForm;}   
      }
    }而后在事件中添加下面代码:if(SingleForm.GetYourForm==null) // 第一次初始化
                {
                    YourForm frm=new YourForm();
                    SingleForm.GetYourForm=frm;
                    frm.MdiParent=this;  
                    frm.Show();
                else
                {
                    SingleForm.GetYourForm.Activate();
                }
      

  5.   

    非MDI窗体打开不重复:private void btn_Click(object sender, EventArgs e)
    {
            if (Fuseredit == null || Fuseredit.IsDisposed)//如果该窗体为空或者被释放了
            {
                    Fuseredit = new FUserEdit(this);//新建该窗体
                    Fuseredit.Show();//SHOW
                    BoundForm(Fuseredit);//绑定窗口弹出位置
            }
            else
            {
                    Fuseredit.Focus();//否则该窗体获得焦点
            }
    }
    private void BoundForm(Form f)//绑定窗体
    {
         int i = int.Parse (Application.OpenForms.Count.ToString()); 
         Rectangle rect = new Rectangle(this.Width, 30*i, f.Width, f.Height);
         f.Bounds = rect;
    }MDI子窗体不重复
    http://blog.csdn.net/tjvictor/archive/2007/01/18/1486420.aspx
    http://www.chinancre.com.cn/two/C/fudao/200811/5400.html