2010-12-05 3 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!");    
} 

あなたははい、いいえなど、キャンセル、OKためdialogResultを確認することができます。これは、ユーザーがフォーム/ダイアログをどのように終了したかを伝える通常の方法です。

+0

感謝が必要だと思います。私はあなたのソリューションを実装します。 – xbonez

+0

私は、イベントハンドラを正確にあなたが示したものに変更しました。新しいフォームにはキャンセルボタンがあります。キャンセルボタンのイベントハンドラはthis.Close()を実行します。しかし、キャンセルボタンを押すと、フォームが消えてから再び表示されます。再度キャンセルを押すとフォームが閉じます。どうしてこんなことに?私の新しいフォームが2回表示されています。 – xbonez

+0

@xbonez、奇妙な、フォームを示す他のコードがないのは確かですか?コンストラクタのように? –

5

単にShow to ShowDialogに変更してください。これは、フォームが特定のステータス(ok、cancelなど)で終了しているかどうかを示す戻り値を取得します。

13

変更ライン

NewCatForm.ShowDialog(); 
6

NewCatForm.Show(); 

あなたがモーダルダイアログをしたいと私はあなたがNewCatForm.ShowDialog();