1

私のプログラムには複数の形式があります。最後の 5 番目のフォームには、クリックすると Application.Exit() メソッドを使用してアプリケーションを閉じるボタンがあります。ただし、ボタンをクリックするたびに、最初のフォームでこのコードを囲む「破棄されたオブジェクトにアクセスできません」というエラーが表示されます。

 frm2 f2 = new frm2();
            this.Hide();
            f2.ShowDialog();
            this.Show();

コンパイラは、ステートメントthis.show()に問題があることを示します。このエラーが表示される理由と修正方法を説明してもらえますか?

4

2 に答える 2

2

わかりました私の答えを編集しました、私はあなたの問題を再現しました。使用する場合Form.ShowDialogは、アプリケーションを閉じているコントロールの DialogResult を設定する必要があります。したがって、ボタンのプロパティで、ダイアログの結果を何かに設定する必要がありますCancel

次に、ボタンのクリック イベントで次のようにします。

    private void btnClose_Click(object sender, EventArgs e)
    {
        if (this.DialogResult == DialogResult.Cancel)
        {
            Application.Exit();
        }
    }

を使用する必要がない場合はForm.ShowDialog、Form2 を表示するだけでかまいません。上記は、私のテストではエラーを生成しません。

于 2012-11-30T23:47:36.417 に答える
0

あなたのコード例ではfrm2、に電話をかけましたApplication.Exitか? もしそうなら、なぜあなたは再び電話をかけようとしていますthis.Showか?

いずれにせよ、アプリケーションのメッセージ ループの開始方法に関連する問題が発生している可能性があります。実行していますかApplication.Run()、またはApplication.Run(form1)?

メッセージ ループを開始したときにフォームを提供した場合は、アプリケーションを終了するためにApplication.Run()呼び出しを行うべきではありません。Application.Exit代わりに、単にメイン ウィンドウを閉じる必要があります。これにより、メッセージ ループが終了し、 への呼び出しがApplication.Run返され、アプリケーションが正常に終了します。

于 2012-12-01T00:18:50.717 に答える