我制作父子窗体,子窗体使用tabControls控件布局。子窗体以后要使用组件制作,通过菜单直接打开调用。现在得问题是在子窗体打开时增加tabPage没有问题,但是在关闭tabPage里面的窗体时:怎样捕捉事件同时减少tabPage。我是这么做的:
//打开窗体
            Form2 fm = new Form2();
            fm.MdiParent = this;
            fm.TopLevel = false;
            TabPage tb = new TabPage();
            tb.Controls.Add(fm);
            tb.Text = fm.Text;
            tabControl1.TabPages.Add(tb);            
            fm.Show();//关闭窗体,我使用得tabControl1_SelectedIndexChanged事件,然后循环tabPages,查找没有控件得page然后关闭。
           foreach (TabPage myTb in tabControl1.TabPages)
            {
               if (myTb.HasChildren==false)
               {
                   tabControl1.TabPages.Remove(myTb);
               }
            }关键:此事件是在更换其他tabPage时发生的,显然不合适,我需要的是当前tabPage中得窗体关闭时激活得事件。我试了tabControl1_ControlRemoved 事件,但是不能激活,上面得过程。估计它检测得是tabControl得控件减少,所以不会发生。请大家帮忙想想怎么写能实现我得要求,一定不要通过子窗体的事件来激活page的减少,那样会比较麻烦。最好是tabControl得事件或者父窗体得事件。

解决方案 »

  1.   

    一般应该不是放Form在TabPage里面,应该放Control然后做一个统一的关闭按钮,关闭的时候把TabControl的活动page删除就可以了。如果你非要用Form,可以在Form的关闭事件里面,得到它的Parent,就是那个tabpage了,删除就可以了
      

  2.   


    是使用Form,但是不想在FOrm上做处理,想在父窗口上做处理。
      

  3.   

    好像只有在子窗体的Formcloseing事件中添加删除才是最好的,不然主窗体只能一直查询是否有窗体关闭。