2017-03-03 7 views
2

J'ai créé un formulaire parent et déclenche l'événement ControlAdded pour cela. Et définissez également la propriété IsMdiContainer à true pour ce formulaire parent. Et puis si je crée une nouvelle forme appelée ChildForm1 et ChildForm2 comme comme ci-dessous le code,Comment puis-je savoir qu'un nouveau formulaire MDI a été ajouté au formulaire MDI parent?

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); 
    } 
} 

Dans ce code ci-dessus, lorsque déboguer le code lors de l'ajout de formulaires enfants à des formes parent, il ne déclenche l'événement ControlAdded. Alors pouvez-vous suggérer un moyen d'y parvenir?

+0

Un doublon possible de [Détection de formulaire MDI avec un formulaire enfant est ajouté ou supprimé] (http://stackoverflow.com/questions/538204/mdi-form-detecting-with-a-child-form-is-added- or-removed) – BugFinder

+0

De loin, le meilleur moyen de le faire est de laisser le parent toujours être celui qui crée de nouvelles fenêtres enfants MDI. Ajoutez 'public void CreateChild () où T: Formule. Vous pouvez même le rendre statique puisqu'il n'y a qu'un seul parent. –

Répondre

2

J'ai trouvé la solution à cette question. Lorsque marqué ParentForm en tant que MdiContainer en définissant le IsMdiContainer à true, l'événement ParentForm.ControlAdded déclenché pour ajouter le contrôle "MdiClient" au formulaire parent. Ainsi, lors de l'ajout MdiClient au parent formulaire MDI, nous pouvons augmenter l'événement ControlAdded pour le contrôle MdiClient comme comme ci-dessous,

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

Nous devons relever le MdiClient.ControlAdded comme comme ci-dessous,

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

Par défaut, les formulaires enfants MDI sont ajoutés dans la collection de contrôles du MdiClient dans le formulaire Parent. Ainsi, lorsque vous définissez la valeur ChildForm.MdiParent en tant que formulaire parent, l'événement ControlAdded pour MdiClient déclenchera.

void MdiClient_ControlAdded(object sender, ControlEventArgs e) 
{ 

} 

Ainsi, en utilisant la méthode ci-dessus, nous pouvons connaître les enfants formulaires MDI ajoutés dans le parent MDI forme.