MDI子窗体无法被激活(多个子窗体打开)
有三个窗体,其中主窗体:Form1,子窗体:Form2、Form3
在Form1中点击按钮btnform2打开子窗体Form2,点击按钮btnform3打开子窗体Form3,其中按钮btnform2触发事件的代码如下:
private bool remark = true;
private void btnform2_Click(object sender, EventArgs e)
         {
             Form2 Data = new Form2();  
             if(remark==true)
             {
                 Data.MdiParent = this;
                 Data.Show();
                 remark=false;
             }
             else
             {
                 Data.Activate();
             }
         }  
以上代码达到不重复打开子窗体的效果,假设先打开子窗体Form2,然后打开Form3(此时Form3处于激活状态),当再次点击按钮btnform2时,
子窗体Form2却没有被激活,也没有显示在所有打开的子窗体的最前面。如果解决这个问题呢?  
------解决方案--------------------private bool remark = true;
  Form2 Data = new Form2();
private void btnform2_Click(object sender, EventArgs e)
       {         
           if(remark==true)
           {
               Data.MdiParent = this;
               Data.Show();
               remark=false;
           }
           else
           {
               Data.Activate();
           }
       }
------解决方案--------------------当你第二次按btnform2时,又实例化了一个Form2。而remark==False,因此它又不显示。所以再Active也没用。
如果要不让它重复打开子窗口可以用“单件模式”。网上例子挺多的。
简单的单价模式:
public partial class Form1 : Form
   {
       #region 构造方法
       /// <summary>
       /// Form1构造方法
       /// </summary>
       private Form1()
       {
       }
       #endregion
       #region Form1单例模式
       /// <summary>
       /// Form1的单例实例
       /// </summary>
       private volatile static Form1 instance = null;
       /// <summary>
       /// 本类型的单例属性
       /// </summary>
       public static Form1 Instance
       {
           get
           {
               if (instance == null||instance.IsDisposed)
               {
                   instance = new Form1();
               }
               return instance;
           }
       }
       #endregion
   }
调用
Form1.Instance.MdiParent = MdiForm;
Form1.Instance.Show();
------解决方案--------------------        private Form ExistedForm(Type type)
       {
           foreach (Form form in MdiChildren)
           {
               if (form.GetType() == type)
                   return form;
           }
           return null;
       }