자식폼에서 작업을 진행한후 그 결과 값을 부모폼에 적용하고 싶을때가 있다.
여러가지 방법을 적용해서 작업을 할수 있다.
첫번째는 자식폼을 실행할 때 부모폼의 레퍼런스를 넘겨주고 자식폼에서는 넘겨받은
부모폼의 레퍼런스로 데이터를 전달하던지 함수를 실행할수 있다.
부모폼에서 실행하는 코드인데 자식폼을 실행할 때 생성자로 레퍼런스를 넘긴다.
실행하면된다.
예로 부모폼의 함수명이나 프로퍼티 명이 바뀌면 자식폼도 같이 바꿔야한다.
그래서 좀더 종속적이지 않은 방법으로 C# 에서는 대리자(delegate)와 이벤트(event) 를 제공한다.
시나리오는 자식폼에서 Close 될때 대리자를 실행하면 부모폼에 등록된 함수가 실행되는
과정이다. 먼저 호출되어지는 자식폼에 대리자와 이벤트를 public 으로 등록한다.
[자식폼]
// delegate 이벤트선언
public delegate void FormSendDataHandler(object obj);
public event FormSendDataHandler FormSendEvent;
// 창을 닫을 때 FormSendEvent 이벤트를 실행한다. 파라미터로 object 를 하나 넘긴다.
private void btnFormClose_Click(object sender, EventArgs e)
{
int no = cboDisSystem.SelectedIndex;
this.FormSendEvent(disSystemNos[no]);
this.Dispose();
}
[부모폼]
// 자식폼을 실행할 때 자식폼에 설정되어있는 이벤트에 DieaseUpdateEventMethod
// 실행할 메소드명을 등록한다. 자식폼에서 이벤트를 실행하면 이 메소드가 실행될것이다.
private void btnReasonAdd_Click(object sender, EventArgs e)
{
FrmAdd frm = new FrmAdd ();
frm.FormSendEvent += new FrmAdd.FormSendDataHandler(DieaseUpdateEventMethod);
frm.ShowDialog();
}
private void DieaseUpdateEventMethod(object sender)
{
Console.WriteLine("이벤트 실행");
}
간단히 정리하자면 자식폼에서는 대리자 이벤트를 등록하고
부모폼에서는 자식폼 실행할 때 다음과 같이 함수를 등록해두면 된다.
frm.FormSendEvent += new FrmAdd.FormSendDataHandler(DieaseUpdateEventMethod);
'기타 언어 > C# & MFC' 카테고리의 다른 글
C# 문자열 날짜형식 포맷팅 (0) | 2009.08.31 |
---|---|
C# 문자열 숫자형식 포맷팅 (0) | 2009.08.31 |
C# ComboBox 에서 선택 내용 수정막기 (0) | 2009.08.23 |
C# 자기가 만든 UserControl 을 Toolbox 에 추가해서 사용하기 (1) | 2009.08.23 |
C# 에서 DirectX 프로그램하기 (1) | 2009.08.12 |
Form window 를 화면의 중앙에 위치 시키고 싶을때 (0) | 2009.06.29 |
에러 - The type or namespace name 'DllImport' could not be found (0) | 2009.06.29 |
C# 파일검색 간단한 예제 (1) | 2009.04.18 |