2011-03-26 4 views
5

간단한 문제가 있습니다 : 저는 win-forms/C#에 메인 폼이 있습니다. 그것은 데이터베이스에 바인딩 된 목록 상자가 있습니다.하위 폼에서 주 폼 액세스하기

버튼을 클릭하면 새 양식이 만들어집니다.

하위 폼의 단추를 클릭하면 기본 폼에있는 메서드를 호출하거나 자식 폼이 닫힐 때 목록 상자를 업데이트하거나 해당 함수를 호출하는 메서드를 호출하려고합니다.

가능합니까 ??

+0

'Save' 및'apply' 버튼이 포함 된 대화 상자를 구현하려고합니까? – manji

답변

6

시나리오 1 : 하위 폼의 단추를 클릭 할 때 부모 양식의 메서드를 호출하십시오.

하위 양식에 Event을 만듭니다. 버튼 클릭 등에서 해당 이벤트를 발생시킵니다. 상위 이벤트의 해당 이벤트를 구독하고 그 이벤트의 상위 폼의 메소드를 호출하십시오.

시나리오 2 : 자식 폼이 닫힐 때 부모 폼의 메서드를 호출하십시오.

부모 양식의 자식 양식에 FormClosed 또는 FormClosing 이벤트를 처리하고 그 안에 부모 양식 메서드를 호출하십시오.

ChildForm frm = new ChildForm(); 
frm.FormClosed += new FormClosedEventHandler(frm_FormClosed); 

void frm_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     //Call your method here. 
    } 
+0

최고 ... 감사합니다 –

14

여기에는 여러 가지 방법이 있지만 여기에는 간단한 방법이 있습니다. 당신이 자식 폼을 생성하고 표시 할 때 기본 폼에, 이런 식으로 작업을 수행합니다

ChildForm child = new ChildForm(); 
child.Show(this); // this calls the override that takes Owner parameter 

을 그런 다음 자식 폼의 기본 폼의 메소드를 호출 할 필요가있을 때,이 같은 코드를 사용는 (가정 귀하의 기본 양식 유형 MainForm)이다 :

MainForm parent = (MainForm)this.Owner; 
parent.CallCustomMethod(); 

더 복잡한 방법으로 당신은 그것의 인터페이스, 더 제대로 부모 폼에 대한 참조를 전달 (또는 할 경우 의존성 주입의 양식을 사용하는 것입니다) 자식 폼의 생성자에서. 그러나 위의 방법은 간단하고 아마도 당신의 목적에 충분히 효과적 일 것입니다 (실제로는 일종의 의존성 삽입 형태입니다).

+1

당신은 또한'ShowDialog (this);'를 사용할 수도 있습니다 -이 코드는 똑같은 방식으로 작동합니다. – MusiGenesis

관련 문제