2017-03-03 5 views
2

親フォームを1つ作成し、そのためにControlAddedイベントを発生させました。また、この親フォームのプロパティIsMdiContainerをtrueに設定します。そして、それはControlAddedイベントを発生させていない親フォームに子フォームを追加するとき、コードをデバッグするとき、私はコードの下など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); 
    } 
} 

を、作成した場合。だから、これを達成するための何か方法を提案できますか?

+0

[MDIフォームで子フォームを検出すると追加または削除される可能性があります](http://stackoverflow.com/questions/538204/mdi-form-detecting-with-a-child-form-is-added-または削除) – BugFinder

+0

これを実行する最良の方法は、親を常に新しいMDI子ウィンドウを作成するものにすることです。 'public void CreateChild ()にT:Form'を追加します。親が1つしかないので静的にすることもできます。 –

答えて

2

この問題の解決策が見つかりました。 IsMdiContainerをtrueに設定してParentFormとしてMdiContainerとマークすると、 "MdiClient"コントロールを親フォームに追加するために発生したParentForm.ControlAddedイベントが発生します。だから、私たちは以下のようなようMdiClient.ControlAddedを調達する必要がある、私たちは以下のようなようMDICLIENT制御ためControlAddedイベントを発生させることができ、親MDIフォームに

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

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

をMDICLIENTを追加するとき

既定では、MDI子フォームは、親フォームのMdiClientのコントロールコレクションに追加されます。したがって、ChildForm.MdiParent値を親フォームとして設定すると、MdiClientのControlAddedイベントはになります。

void MdiClient_ControlAdded(object sender, ControlEventArgs e) 
{ 

} 

したがって、上記の方法を用いることにより、我々はMDIはを形成し、親に追加された子MDIフォームを知ることができます。

関連する問題