2012-03-10 1 views
0

자식에 의해 생성 된 사용자 지정 이벤트를 처리하는 MDImain (Form1)이 있습니다. 자식 폼의 인스턴스를 만들 때 자식 이벤트를 부모 처리기에 연결합니다. 모든 위대한 부모는 자녀가 생성 한 이벤트를 포착합니다. 상위의 코드는 다음과 같습니다.여러 폼을 통해 부모에게 전달할 사용자 지정 이벤트 체인

ChildForm instanceChildForm = new ChildForm(); 
instanceChildForm.Feedback += new EventHandler<feedback>(MainMessageHandler); 

그때 내가 자식 폼을 표시 ...

지금 내가 내 자식 폼이 아이 2.가에서 인스턴스화 된 세 번째 형태는 전화를 표시 할 (메인 메시지 핸들러는 부모 폼에) childForm,하지만 부모 MDI가이 이벤트를 계속 catch하기를 원합니다. mdi 학부모에게 통풍구를 다시 가져 오는 방법.

내가 생각할 수있는 모든 기본 폼에 MainMessageHandler 일상 대중을하는 것입니다,하지만 난 여전히 기본 폼에 대한 심판이 필요합니다 ... child3.parent = child2parent는 다음과 같이 이벤트를 첨부 :

ChildForm2 instanceChildForm2 = new ChildForm2(); 
instanceChildForm2.Feedback += new EventHandler<feedback>(this.parent.MainMessageHandler); 

등등.

또는 위임 유형의 경우이 것이 좋을까요? 그렇다면 어떻게 그걸 풀어 낼지 모르겠다.

도움 주셔서 감사합니다.

+1

http://stackoverflow.com/questions/217233/bubbling-up-events – Oded

답변

1

백만 가지 방법과 한 가지 방법이 있습니다. 제 생각에는 모든 Windows 응용 프로그램에서 모든 양식과 상태를 알고 있어야하며 종속성을 만들지 않고 메시지를 지나갈 수 있어야합니다. 뭔가 같이 :

public class FormManager 
{ 
    List<Form> _forms = new List<Form>(); 

    public void CreateForm<T>() where T : Form, new() 
    { 
     var form = new T(); 
     _forms.Add(form); 
     AttachEvents(form); 
     form.Show(); 
    } 

    ...methods for attaching events, responding to them, and DETACHING on form.Closed 
} 

대신 new() 양식을 보내고, 당신은 FormManager.CreateForm<Form1>();

지금 사용하는 양식 중 하나가 이벤트를 발생하는 경우, 당신은 모든 형태, 부모와 자녀 모두 당신에 액세스 할 수 그 사건에 대해 무엇을해야할지 결정할 수 있습니다. 결정을 현명하게하려면 FormManager에서 결정을 내리거나 양식 자체로 푸시 할 수 있습니다.

+0

생성자를 사용하여 양식에 값을 전달하는 경우 복잡해질 수 있습니다. – pStan

+0

사전 생성 된 양식을 허용하는 Register 메소드를 추가 할 수도 있습니다. 요점은 동일합니다. 양식의 중앙 저장소가있는 경우 이벤트를 첨부하고 의사 결정을 내릴 수 있습니다. –

+0

등록 방법이 좋게 들립니다. 다른 모든 폼에서 상속받은 사용자 지정 기본 폼이 있습니다. 로드 된 후 양식을 등록한 다음 추가 이벤트를 연결합니다. 당신의 아이디어에 감사드립니다. – pStan

관련 문제