2010-12-05 4 views
9

많은 경험이 없으므로 Win Forms 응용 프로그램을 만들고 있습니다. 내 프로그램에는 메인 폼에 버튼이 있습니다. 그것을 클릭하면 또 다른 폼이 시작됩니다. 새 양식을 시작할 때새 양식을 닫을 때까지 실행을 일시 중지 할 수 있습니까?

private void btn_AddCat_Click(object sender, EventArgs e) 
     { 
      this.Invoke(new MethodInvoker(() => 
      { 
       form_NewCat NewCatForm = new form_NewCat(); 
       NewCatForm.Show(); 
      })); 

      MessageBox.Show("Oops!");    
     } 

문제는, 내가 새 양식이 닫힐 때까지 그 시점에서 일시 정지 기본 양식 뒤에 코드의 실행을하려면 다음과 같이 코드입니다. 예를 들어, 위의 코드에서 나는 '죄송합니다!'를 원하지 않습니다. 새 양식이 닫힐 때까지 인쇄 할 수 있습니다. 어떻게하면 될까요?

답변

10

UI 스레드에서 호출 할 필요가 없습니다. 그리고 버튼 클릭 이벤트 처리기의 UI 스레드에 있습니다. 당신의 form_NewCat 닫기 전에 값으로 this.DialogResult을 설정하면

private void btn_AddCat_Click(object sender, EventArgs e) 
{ 
    form_NewCat NewCatForm = new form_NewCat(); 
    var dialogResult = NewCatForm.ShowDialog(); 
    MessageBox.Show("Oops!");    
} 

당신은 예, 아니오, 등, 취소, 확인을 위해 DialogResult를 확인할 수 있습니다. 이것은 사용자가 양식/대화 상자를 나간 방법을 알리는 일반적인 방법입니다.

+0

덕분에 필요가 있다고 생각합니다. 당신의 솔루션을 구현하겠습니다. – xbonez

+0

이벤트 처리기를 u가 보여준 것과 정확히 일치하도록 변경했습니다. 새 양식에 취소 버튼이 있습니다. 취소 버튼의 이벤트 핸들러는 this.Close()를 실행합니다. 그러나 취소 버튼을 누르면 양식이 사라지고 다시 나타납니다. 취소를 다시 누르면 양식이 닫힙니다. 왜 이렇게이다? 내 새 양식이 두 번 표시됩니다. – xbonez

+0

@xbonez, 이상한, 당신은 폼을 보여주는 다른 코드를 가지고 있지 않습니까? 생성자 에서처럼? –

5

표시를 ShowDialog로 변경하면됩니다. 이것은 또한 폼이 특정 상태 (ok, cancel 등)로 종료되는지 여부를 나타내는 반환 값을 가져옵니다.

13

변경

NewCatForm.ShowDialog(); 
6

에 선

NewCatForm.Show(); 

당신은 모달 대화를 원하고 당신이 NewCatForm.ShowDialog();

관련 문제