-1

複数のフォームを使用するプログラムがあり、フォーム 2 からアプリケーションを終了して、実行またはデバッグを停止できるようにしたいと考えています。

これは私が試したコードです:

 private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form1 frm = new Form1();
            frm.Close();
            this.Close();
        }

上記のコードを使用すると、フォームは閉じますが、デバッグ プロセスは停止しません。これが問題かどうかはわかりません。

4

3 に答える 3

3

アプリケーション全体を閉じたい場合は、 を呼び出すことができますApplication.Exit

于 2013-02-06T23:28:10.567 に答える
1

wRAR が示唆するように Application.Exit を実行するか、次の代替手段を試すことができます。

与えられた例では:

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
    Form1 frm = new Form1();
    frm.Close();
    this.Close();
}

Form1 への参照で Close を呼び出していないため、 Form1 は閉じません。新しいインスタンスで close を呼び出しています。

代わりに、Application.Exit を使用したくない場合は、Form1 への参照を使用して Form2.Show(this) を呼び出したと仮定して、いつでも次の操作を実行できます。

private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{      
    this.Close();
}

private void Form2_FormClosing(object sender, FormClosingEventArgs e)
{
   if ( this.Owner != null )
     this.Owner.Close();
}
于 2013-02-06T23:48:50.513 に答える
1

コードが機能しない理由は、Form 2 が起動されたインスタンスではなく、Form1 の新しい別のインスタンスを作成しているためです。

したがって、Form1 の新しいインスタンスを作成し、新しい Form1 を閉じてから Form2 を閉じます。Form2 が開かれた Form1 のインスタンスを参照することはありません。

Form2 で元の Form1 を閉じる場合は、Form2 に Form1 への参照を渡して、Form2 が Form1 の親インスタンスで Close() を呼び出せるようにする必要があります。

wRar には、探している答えがあります。

于 2013-02-06T23:41:38.503 に答える