Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

윈폼개발

닷넷을 기반으로 한 윈도우 응용프로그램 개발 지식을 다룹니다. 비지니스 응용프로그램을 위한 닷넷 윈폼 응용프로그램은 아주 강력합니다

[기본] 모덜(Modal) 과 모덜리스(Modeless)

작성자 : 박종명
최초 작성일 : 2008-06-26 (목요일)
최종 수정일 : 2008-06-26 (목요일)
조회 수 : 3505

이번 포스트에서는 Form 을 화면에 보여주는 두 가지 방식에 대해 간략히 소개하고자 합니다

보통 사용자가 새로운 폼을 만든다는 것은 닷넷 프레임워크의 System.Windows.Forms.Form 클래스로 부터 상속받아서 만들어 지게 됩니다

이때 이 사용자 정의 폼을 띄우는 방식에는 모덜(Modal) 모덜리스(Modeless) , 두 가지 방식이 있습니다

 

만일 다음과 같이 MyForm 이라는 폼 클래스를 정의하였다면

MyForm myForm = new MyForm()

 

MyForm 객체를 생성하고, 아래와 같이 두 가지 방식 중 하나로 폼을 화면에 나타나게 할 수 있습니다

 

-- 폼을 Modeless 로 띄우기

myForm.Show()

-- 폼을 Model 로 띄우기

myForm.ShowDialog()

 

 

차이점 1 - 제어권

이 두 방식의 가장 큰 차이점은 바로 '제어권' 입니다

 

만일 모덜리스(Modeless) 로 폼을 띄웠다면 이 폼이 닫히기 전까지는 제어권을 넘겨주지 않습니다

이 폼이 닫혀야 부보 폼의 다음 코드가 실행되는 것이지요

 

그렇지 않고 모덜(Model) 형태로 띄웠다면 폼을 띄운 후 바로 다음코드가 실행되게 됩니다

 

다음의 샘플코드를 보겠습니다

 

 MyForm myForm = new MyForm();
 myForm.Show();

 

 MessageBox.Show("폼 띄운 후 코드 실행");

 

 

위 코드는 폼을 모덜리스로 띄우고 난 뒤 메세지 박스를 보여주는 코드 입니다

이 코드를 실행해 보면 폼을 Show() 로 띄운 후 바로 메세지 상자가 나오는 것을 확인 할 수가 있습니다

 

그렇지 않고 다음코드를 실행한다면, MyForm 이 닫혀야만 다음 코드가 실행되게 됩니다

 

 MyForm myForm = new MyForm();
 myForm.ShowDialog();

 

 MessageBox.Show("폼 띄운 후 코드 실행");

 

 

 

차이점 2 - 반환 값

두 번째 차이점으로는 Show() ShowDialog() 메서드는 반환값에 있습니다

아래는 이 두 메서드는 시그너처 입니다

 

 public <?XML:NAMESPACE PREFIX = MSHelp NS = "http://msdn.microsoft.com/mshelp" /><?xml:namespace prefix = mshelp /><?xml:namespace prefix = mshelp />void Show ()

 public DialogResult ShowDialog ()

 

메서드 시그너쳐에서 알 수 있듯이 Show 메서드는 void 로 반환값이 없는 반면, ShowDialog 메서드는 DialogResult 열거형 타입을 반환하도록 되어 있습니다

 

폼을 모덜방식인 ShowDialog 로 띄웠을 경우 그 폼의 'X' 표시를 누르면 DialogResult.Cancel 이 반환되게 됩니다

다음의 코드를 실행 한 후 새로 띄운 폼을 'X' 버턴으로 닫으면 Cancel 이 반환되었음을 확인 할 수가 있습니다

 

 MyForm myForm = new MyForm();
 DialogResult dg = myForm.ShowDialog();

 MessageBox.Show(dg.ToString());

 

 

 

또한 ShowDialog 로 폼을 나타나게 했을 경우 그 폼의 DialogResult 값을 None 이외의 값으로 설정하면

폼이 자동으로 닫히게 됩니다(DialogResult.None 는 폼이 아직 실행중임을 나타내는 값이므로 폼이 닫히지 않습니다)

MyForm 의 특정 버턴 이벤트에 다음과 같은 코드가 있다면 폼은 DialogResult 값이 설정됨과 동시에 닫히게 됩니다

 

 private void button1_Click(object sender, EventArgs e)
 {
      this.DialogResult = DialogResult.No;
 }

 

 

또한 당연하겠지만 ShowDialog 로 나타난 폼의 경우 폼의 DialogResult 값이 설정되면 폼 Closed 이벤트도 발생하게 됩니다 (폼이 자동으로 닫히니까 당연히 이벤트가 발생하겠지요..)

 

 

반면, Show 로 모덜리스로 띄울 경우 반환값이 없으며(void) 폼의 DialogResult 에 값을 설정해도 폼은 닫히지 않습니다.

폼을 Show 로 띄운 후 위 코드를 테스트 해 보면 아무런 반은이 없음을 확인 할 수 가 있습니다

 

 

이름
비밀번호
홈페이지
CU <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요