2017-03-03 83 views
2

我已經創建了一個父窗體併爲此引發了ControlAdded事件。並且還爲此父窗體設置屬性IsMdiContainer爲true。然後,如果我創建一個新的形式稱爲ChildForm1和ChildForm2像下面的代碼,我怎樣才能知道新的MDI表單添加到父母的MDI表單中?

public partial class ParentForm : Form 
{ 
    public ParentForm() 
    { 
    InitializeComponent(); 
    this.ControlAdded += Form1_ControlAdded; 
    this.IsMdiContainer = true; 

    Form ChildForm1 = new Form();   
    ChildForm1.MdiParent = this; 
    ChildForm1.Show(); 

    Form ChildForm2 = new Form();  
    ChildForm2.MdiParent = this; 
    ChildForm2.Show(); 
    } 

    void Form1_ControlAdded(object sender, ControlEventArgs e) 
    { 
    MessageBox.Show("Control Added" + e.Control.Name); 
    } 
} 

在這上面的代碼中,增加子窗體到父當調試代碼時形成不引發ControlAdded事件。所以你可以請任何方式來實現這一目標?

+0

[MDI表單檢測與子表單檢測添加或刪除]的可能的副本(http://stackoverflow.com/questions/538204/mdi-form-detecting-with-a-child-form-is-added-或刪除) – BugFinder

+0

到目前爲止,做到這一點的最好方法是讓父母始終創建新的MDI子窗口。加入'public void CreateChild ()where T:Form'。你甚至可以把它變成靜態的,因爲只有一個父母。 –

回答

2

我找到了這個問題的解決方案。當通過將IsMdiContainer設置爲true將ParentForm標記爲MdiContainer時,會引發ParentForm.ControlAdded事件,以將「MdiClient」控件添加到父窗體。因此增加MDICLIENT父MDI窗體時,我們可以提高ControlAdded事件的MDICLIENT控制像下面,

public ParentForm() 
    { 
    InitializeComponent(); 
    this.ControlAdded += Form1_ControlAdded; 
    this.IsMdiContainer = true; 

我們需要提高MdiClient.ControlAdded像下面,

void Form1_ControlAdded(object sender, ControlEventArgs e) 
     { 
      if(e.Control is MdiClient) 
       e.Control.ControlAdded += MdiClient_ControlAdded; 
     } 

默認情況下,MDI子表單被添加到父表單的MdiClient的控件集合中。因此,將ChildForm.MdiParent值設置爲父窗體時,MdiClient的控件添加事件將增加

void MdiClient_ControlAdded(object sender, ControlEventArgs e) 
{ 

} 

因此,通過使用上述方法,我們就可以知道加入MDI形成父子MDI形式。