0

重複の可能性:
スタートアップ フォームを閉じたときにアプリが終了しないようにするにはどうすればよいですか?

Form1 と Form2 の 2 つのフォームを持つアプリケーションを想像してください。Form1 のボタンをクリックすると、Form2 を開いて Form1 を閉じ、非表示にせずに閉じます。私が行っていた方法は次のとおりです。

_Form2 = new Form2();
_Form2.Show();
 this.Close();//or this.Dispose();

コードを実行すると、form1 が閉じられ、アプリケーションが終了します。よくわかりませんが、私のProgram.csにあるのApplication.Run(new Form1());でしょうか?または、この行は、アプリケーションの起動時に Form1 をロードする必要があることを意味するだけですか?

4

3 に答える 3

4

あなたが望むものを達成するための様々な方法があります....それはすべてあなたが間Form1で必要とする微妙な相互作用とあなたがForm2シーケンスをどのように組織したいかに依存します。

1つの方法は、Application.Run()代わりに使用することです。ただしApplication.Exit()、アプリケーションを閉じたい場合は使用する必要があります。メッセージループとアプリケーションを終了する必要があることを通知する必要があるためです。

これは、フォームが表示されなくなったとみなしたときにフォームに対して行う「フォームを閉じる」呼び出し(つまり、.Close())に追加されることに注意してください。

これにより、最初に表示できるようになりますForm1....(モードレスを使用しているためShow()).....次に、を閉じてForm1、セカンダリを作成して表示できますForm2.....次にApplication.Exit();

MSDNのより複雑な例、つまりApplication.Run(ApplicationContext)コンテキストを使用する場合は、複数のフォームを作成し、両方を閉じたときにフォームを終了するユースケースがある場合です。

于 2012-11-22T00:37:56.097 に答える
3

はい、あなたは正しいです。Run メソッドに記載されているフォームは「メイン フォーム」であり、これを閉じるとアプリケーションが終了します。Form1 を閉じたい場合は、次の操作を実行できます。

Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 form = new Form1();
            form.Show();
            Application.Run();

Form1 を閉じ、ボタンのクリックで Form2 を開くコード:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
            Form2 form = new Form2();
            form.Show();
        }
    }

アプリを終了するには、もう 1 つボタンを配置 (またはイベント ハンドラーを提供) し、次のコードを実行します。

Application.Exit();
于 2012-11-22T00:39:46.397 に答える