-4

質問する前にシナリオを作成します。スタート ボタンのあるフォームがあるとします。ユーザーがそれを押すと、続行するかどうかを尋ねるメッセージ ボックスがポップアップ表示され、オプションは「はい」または「いいえ」です。ユーザーが no を押すと、プログラムはその動作を停止し、フォームに戻り、テキスト ボックス/コンボ ボックスなどをクリアします。

ここで私の質問です。「いいえ」を選択すると、プログラムがさらにコードに入るのをどのように停止しますか? コードが実行していることを停止し、何も起こらなかったようにフォームに戻るには?

私は自分自身を十分に説明したことを願っています...

誰も気にしないでください、私が間違っていたことに気づきました... 危機は回避されました。しかし、ご意見をお寄せいただきありがとうございます。

4

2 に答える 2

2

通常、モーダル フォームを使用します。これは、現在のメソッドがブロックされ、モーダル フォームが返されるまでブロックされることを意味します。

次のようなことを試すことができます:

        DialogResult result = MessageBox.Show("Title", "Are you sure?", MessageBoxButtons.YesNo, MessageBoxIcon.Question);

        if (result == DialogResult.No)
            return;

カスタム フォームをモーダルとして表示する場合は、Show() の代わりに ShowDialog() を使用する必要があります。ShowDialog は、実行中のメソッドの現在の実行をブロックし、ウィンドウ メッセージを処理するための一時的なメッセージ ループをセットアップします。

お気に入り:

using(FormQuestion form = new FormQuestion())
{
    DialogResult result = form.ShowDialog();
    // check the result.
}

詳細については、ここを確認してください: モーダルおよびモードレス Windows フォームの表示http://msdn.microsoft.com/en-us/library/aa984358(v=vs.71).aspx

于 2013-08-13T18:48:09.583 に答える
0

一般に、.NET は協調的なキャンセル モデルを使用するため、メソッドにはキャンセルが要求されたことを通知するメカニズムが必要であり、メソッド自体を明示的にキャンセルする必要があります。

CancellationTokenSourceこれは、クラスと構造体を介してフレームワークの多くの部分で処理されCancellationTokenます。

詳細については、MSDNの「マネージ スレッドでのキャンセル」を参照してください。

そうは言っても、問題のメソッドが を直接使用している場合、結果が(Windows フォームの場合) または未設定または false (WPFの場合)MessageBoxの場合は、単に戻るか、動作を停止する可能性があります。DialogResult.NoWindow.DialogResult

于 2013-08-13T18:47:30.377 に答える