2017-03-03 2 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 ()에 T : Form'을 추가하십시오. 부모가 하나 밖에 없으므로 정적으로 만들 수도 있습니다. –

답변

2

이 질문에 대한 해결책을 찾았습니다. IsMdiContainer를 true로 설정하여 ParentForm으로 MdiContainer로 표시하면 부모 폼에 "MdiClient"컨트롤을 추가하기 위해 ParentForm.ControlAdded 이벤트를 발생시킵니다. 부모 MDI 폼에 MdiClient를 추가 할 때, 우리는 우리가 MdiClient.ControlAdded를 제기 할 필요는 MdiClient 컨트롤 아래 같은에 대한

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

을 ControlAdded 이벤트를 발생 올릴 수 있습니다, 아래 등

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

기본적으로 MDI 자식 폼은 부모 폼의 MdiClient 컨트롤 컬렉션에 추가됩니다. 따라서 ChildForm.MdiParent 값을 부모 폼으로 설정하면 MdiClient에 대한 ControlAdded 이벤트가으로 높아집니다.

void MdiClient_ControlAdded(object sender, ControlEventArgs e) 
{ 

} 

그래서 위의 방법을 사용하여, 우리는 MDI는 형성하는 부모에 추가 MDI 자식 양식을 알 수 있습니다.

관련 문제