1

フォームが閉じる前にメッセージボックスが表示されるのはなぜですか?

SomeForm myForm = new SomeForm();
myForm.Show();
MessageBox.Show("Some text");

新しいスレッドを開始して、終了するのを待つ必要がありますか?私はこれまでこの問題に遭遇したことがありません。

4

4 に答える 4

5

代わりにForm.ShowDialog()を使用する必要があります。Form.Showはモードレスウィンドウを表示しますが、Form.ShowDialogはモーダルフォームを表示します。つまり、ユーザーが続行する前に閉じる必要があります。

于 2012-09-28T15:52:43.480 に答える
1

あなたの例は実際に閉じることはありませんmyForm...それを示すだけです。myForm上記のコードが表示され、すぐにが表示されることを期待しますMessageBox

メッセージボックスを表示する前に閉じたい場合は、ある時点でmyForm呼び出す必要があります。myForm.Close()

于 2012-09-28T15:53:18.443 に答える
1

これはmyForm.Show();、新しいウィンドウのオープンを開始するためですが、ブロッキング呼び出しではありません。これはダイアログではなく、独自に実行される別のウィンドウです。

SomeFormをダイアログとして表示する場合(ウィンドウをブロックし、閉じるまで待機して実行を続行します)、を使用しますShowDialog。メッセージボックスを表示する前にウィンドウが開くまで待ちたい場合は、SomeFormクラスのOnLoadedにメッセージボックスを追加します。

于 2012-09-28T15:56:01.150 に答える
1

この他のフォームが表示されている間、ユーザーがメインフォームを操作できないことが重要な場合は、のmyForm.ShowDialog代わりにを使用できますShowShowDialogはブロッキング関数であるため、他のフォームが閉じられるまで戻りません。 Show一方、は、他のフォームを表示するだけで、フォームが閉じられるのを待たずにすぐに戻ります。

他のフォームがモーダルで表示されないことが意図されていて、その変更を行わない(またはできない)場合は、イベントを使用して、他のフォームが閉じられたときにメッセージボックスを表示できます。

SomeForm myForm = new SomeForm();
myForm.FormClosed += (form, args) =>
{
    MessageBox.Show("Some text");
};
myForm.Show();

これにより、他のフォームが閉じられたときに起動するイベントハンドラーが追加され、適切なタイミングで目的のコードが実行されます。

于 2012-09-28T16:05:31.943 に答える