2012-05-22 4 views
2

특정 자식의 여러 인스턴스를 포함 할 수있는 MDI 부모 창이 있습니다 frmChild. 이제 특정 컨트롤이 부모를 클릭했을 때, 나는 활성 frmChild을 얻을 frmChild에서 특정 메소드를 호출 할 필요가 아래부모로부터 특정 MDI 자식의 메서드 호출

내가 달성하기 위해 노력하고있는 무슨의 이미지입니다 (활성 MDI 자식을 가져오고 호출 그 클래스의 특정 방법) :

a busy cat http://i47.tinypic.com/aurv7.jpg

지금 각 frmChild에 의해 인스턴스화 :

private void newFileToolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     frmNewDocument = new frmNewDocument(); 
     frmNewDocument.MdiParent = this; 
     frmNewDocument.Show(); 
    } 

난에서 메소드를 호출 할 활성 frmChild, 나는 다음을 시도하고와 붙어 : 난 아직도 OOP를 배우고 확신하고

private void saveFileToolStripMenuItem1_Click(object sender, EventArgs e) 
    { 
     /* get active MDI child*/ 
     Form frmActiveNewDocument = this.ActiveMdiChild;   

     /* make sure MDI child is a "New Document" type form */ 
     if (frmActiveNewDocument.GetType() == frmNewDocument.GetType()) 
     { 
      /* invoke a method from active frmChild here */ 
     } 
    } 

이 몇 가지 원칙이다. 그 기사에서 언급 될 수 있다면 그것은 또한 위대한 것입니다.

** 참고 : frmChild에 대한 간섭이이 문제에 접근하는 가장 좋은 방법이므로 기본 폼은 각 frmChild에서 파기 할 필요가 없으므로 frmChild가 사용하는 인터페이스를 만들었습니다. 입니다 : ** 지금

public interface NewFileFormInterface 
{ 
    void saveFile(); 
} 

, SAVEFILE() 내가 frmChild에서 구현 홈페이지에서 호출 할 방법입니다.

이 문제와 제가 조사 할 수있는 몇 가지 키워드에 대한 도움이 될 것입니다.

TIA!

답변

2
frmNewDocument child = ActiveMdiChild as frmNewDocument; 
if (child != null) 
{ 
    child->saveFile(); 
} 

as 키워드는 런타임 캐스트를 수행합니다. 오브젝트 (이 경우 ActiveMdiChild)가 널 (NULL)이거나 유형이 아닌 경우, 결과는 널입니다.

http://msdn.microsoft.com/en-us/library/cscsdfbt.aspx

또한 독서에 관심이있을 수 있습니다 .Net Naming Convention Guidelines

+0

답장을 보내 주셔서 감사합니다. 이 방법이 도움이되었지만 가능한 해결책인데 실제 양식 대신 인터페이스를 사용하는 방법이 있습니까? 죄송합니다.이 말이 의미가 없지만 지금은 혼란 스럽습니다. 나는 모든 것을 가능한 느슨하게 결합하고 싶습니다. – brazc0re

+1

예,'frmNewDocument'보다는'NewFileFormInterface'를 사용하십시오. 자식 폼이 그 인터페이스를 구현한다고 가정하십시오. – Tergiver

+0

완벽하게 작업했습니다. 예 모든 ** frmNewDocument ** 클래스는 ** NewFileFormInterface를 구현합니다 ** 링크도 감사드립니다. 나는 그들에게 책을 줄 것이다. – brazc0re

1

이 시도 :

if (ActiveMdiChild is frmNewDocument) 
{ 
    (ActiveMdiChild as frmNewDocument).saveFile(); 
} 
1

나는이 오래 알고 있지만, 이것은 항상 나를 위해 일했다. 아동의 코드에서

:

public void SaveFile() 
{ 
    // Some code goes here. 
} 

그리고 부모 코드 :이 작품보다 간결하게 대답을 찾고 다른 사람을 도움이

frmNewDocument child = this.ActiveMdiChild as frmNewDocument; 
if(child != null) 
{ 
    child.SaveFile(); 
} 

희망.

+0

그건 나를 위해 완벽하게 작동 .. 고마워. –