1

実際のフォームの前にダイアログ(メッセージボックス)を表示したいのですが、ユーザーが[いいえ]を選択すると、アプリケーションを完全に閉じる必要があります。以下のコードを使用しようとしていますが、[いいえ]をクリックした後でもフォームが表示されます。

public Form1()
{
    InitializeComponent();

    if (MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.No)
        Application.Exit();
}

私も試しthis.Clsoeましたが、それから私はApplication.Run()

何が問題ですか?そうするための最良のアプローチは何でしょうか?

4

4 に答える 4

5

あなたの中にそれを入れてはどうですかProgram.cs(あなたがアプリを起動するかどうかを決定したいと仮定して)

    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        if (
            MessageBox.Show(
                "Contiue or not", "Question", 
                MessageBoxButtons.YesNo, 
                MessageBoxIcon.None, 
                MessageBoxDefaultButton.Button1) == DialogResult.Yes)
            Application.Run(new Form1());
    }
于 2012-05-15T13:10:54.627 に答える
1

コンストラクターでそのようなことをしないでください。オブジェクトを作成する前に、オブジェクトを作成するかどうかを知っておく必要があります。実際のフォームの前にMessageBoxを表示したい場合は、コンストラクターを呼び出す前に、たとえばを呼び出す前に表示しますApplication.Run()

Application.Exit()すべてのメッセージポンプを終了しようとしますが、それらを開始するため、まだ開始されていませんApplication.Run()
またApplication.Exit()、アプリケーションのすべてのウィンドウを閉じますが、Form1まだ構築されていないため、まだありません。
実行を開始する前にアプリケーションを終了しようとしています(Runまだ呼び出されていません)。
したがって、アプリケーションの唯一のフォームのコンストラクター内でそのメソッドを呼び出すことは、あまり意味がありません。

于 2012-05-15T13:15:14.067 に答える
1

このようにprogram.csでそれを行います:

  Application.EnableVisualStyles();
  Application.SetCompatibleTextRenderingDefault(false);
  if (MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
    Application.Run(new Form1());
于 2012-05-15T13:12:16.700 に答える
1

OnLoadコンストラクターの代わりにイベントにメッセージボックスを表示します。例:

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    if (MessageBox.Show("Contiue or not", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.None, MessageBoxDefaultButton.Button1) == DialogResult.No)
    {
        Application.Exit(); // or this.Close();
    }
}

Application.Exit()フォームがまだないため、コンストラクターでは機能しません。したがって、停止するメッセージポンプはありません。
また、フォームthis.Close()での呼び出しが発生するため、エラーが発生します。Dispose()フォームを表示しようとした直後Application.Runですが、破棄されて例外がスローされます。

于 2012-05-15T13:13:29.493 に答える