1

すべてのテキストボックスと変数を簡単にリセットできるように、メインフォームをリセットしようとしています。Progam.csにブール値を追加して、フォームを閉じてから再度開いている間、アプリケーションを開いたままにしておくことができるようにしました。閉じようとすると、on_closeingが2回も発生します。それを止めるために何をすべきかはわかりませんが、それは単純なものでなければならないことは知っています。

Program.cs:

static class Program
{
    public static bool KeepRunning { get; set; }
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        KeepRunning = true;
        while (KeepRunning)
        {
            KeepRunning = false;
            Application.Run(new Form1());
        }

    }
}

フォーム1:

private void button1_Click(object sender, EventArgs e)
    {
        Program.KeepRunning = true;
        this.Close();
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        DialogResult dialogResult = MessageBox.Show("You have unsaved work! Save before closing?", "Save?", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation);
        if (dialogResult == DialogResult.Yes)
        {
            e.Cancel = true;
            MessageBox.Show("saving then closing");
            Application.Exit();
        }

        if (dialogResult == DialogResult.No)
        {
            MessageBox.Show("closing");
            Application.Exit();
        }

        if (dialogResult == DialogResult.Cancel)
        {
            e.Cancel = true;
            MessageBox.Show("canceling");
        }
    }
4

2 に答える 2

0

を削除しますApplication.Exit()。すでにFormClosingイベントハンドラーを使用しているため、がProgram.KeepRunningfalseに設定されている場合、アプリケーションは終了します。

于 2013-03-24T01:29:38.647 に答える
0

これは、Application.Exit()を呼び出すために発生します。フォームはまだ閉じられていないため、アプリケーションを閉じようとすると、その命令はフォームの最初の部分を閉じようとし、次にイベントハンドラーをもう一度呼び出します。

また、Application.Exit()が唯一のフォームであり、アプリケーションが自動的に閉じるため、Application.Exit()は必要ないと思います(少なくとも、これは私のVB6の昔のことです!)

于 2013-03-24T01:32:07.043 に答える