[C#] 모델리스(modeless) 다이얼로그 이벤트 처리하기

Programming/Code 2010.04.28 댓글 Joshua95
모델 다이얼로그를 사용하는 경우, 해당 다이얼로그를 생성/호출한 곳에서는 다이얼로그가 Close 되는 시점에 반환값을 받아서 처리하면 되므로 시점이 명확한 장점이 있습니다. 그러나, 모델리스(modeless) 다이얼로그를 사용하는 경우에는 해당 다이얼로그의 이벤트나 반환값을 받아서 될 시점이 명확하지 않아서 난감할 때가 있습니다.

이러한 경우에는 다음과 같은 이벤트 핸드러 함수를 등록하여, 다이얼로그를 호출한 곳에서 해당 다이얼로그의 이벤트를 받아 처리하도록 구현할 수 있습니다.

//  1. 모델리스 다이얼로그(TestDialog)에 아래의 EventHanlder 선언
public event EventHandler TestCloseHandler;
 
//  2. 모델리스 다이얼로그(TestDialog)의 Close 버튼 이벤트 핸들러에서 1번의 Handler 호출
void closeButton_Click(object sender, RoutedEventArgs e) 
{
   if(CloseEventHandler != null)
   {
      CloseEventHandler(this, EventArgs.Empty);
   }
}
 
// 3. 다이얼로그 호출하는 부분에서 이벤트 처리 함수 등록
TestDialog dlg = new TestDialog();
dlg.Owner = Main;
dlg.TestCloseHandler += DialogCloseHandler;
dlg.Show();
 
// 4. 다이얼로그를 호출하는 부분에서 이벤트 처리 함수 추가
public void DialogCloseHandler(object sender, EventArgs e)
{
   // 원하는 close 처리 루틴 추가
}

끝.

댓글