2016-03-24 20 views
-2

私はメインフォーム(ホームスクリーン)と多くのサブフォームを持つWindowsアプリケーションを持っています。System.ObjectDisposedExceptionフォームを閉じるとき

サブフォームが閉じられ、メインフォームから再度呼び出されると、System.ObjectDisposedException例外が発生します。

は、以下の私の画面のコードが記載されています:

ホーム画面のコードは、サブフォームを呼び出す:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace Application 
{ 
    public partial class Home : Form 
    { 

     private void Businesslogic_button_Click(object sender, EventArgs e) 
     { 
      BusinessRules.Show(); 
     } 

    } 
} 
処分のオブジェクトの

サブフォームDesigner.CSコード:

protected override void Dispose(bool disposing) 
{ 
    if (disposing && (components != null)) 
    { 
     components.Dispose(); 
    } 

    base.Dispose(disposing); 
} 

サブフォーム.CSコードについてフォーム終了イベント:

bool formClosing false; 
private void BusinessRules_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     if (formClosing) return; 
     e.Cancel = true; 
     Timer Tmr = new Timer(); 
     Tmr.Tick += Tmr_Tick; 
     Tmr.Start(); 
     formClosing = true; 
    } 

    void Tmr_Tick(object sender, EventArgs e) 
    { 
     ((Timer)sender).Stop(); 
     this.Close(); 
    } 
+4

'BusinessRules_FormClosing'のタイマーの目的は何ですか? –

+1

また、投稿したコードのサブフォームを閉じて再オープンする方法を示していません –

+2

「ビジネスルール」はどこに作成されていますか?私はあなたが 'Home_Load'のような場所でそれを一度作成し、毎回同じインスタンスを使用していると考えています。 'BusinessRules'フォームを単に隠すのではなく、処理を中止しているので、処分されたフォームで' Show() 'を呼び出しています。 – Rhumborl

答えて

2

フォームの状態を保存する必要がある場合は、単純に隠す()メソッドを呼び出し、e.Cancel = trueを設定します。その後、フォーム変数のShow()を再度呼び出して、再度開きます。

状態を保持しない場合は、フォームを閉じるだけです。メインページからフォームの新しいインスタンスを開きます。

+0

こんにちは...ただの簡単な質問....それは閉じたXを得るたびに、サブフォームの新しいインスタンスを作成する方法......? –

+0

あなたはすでにあなたのメインフォームにそのコードがあると思いますか? 'var businessRulesForm = new BusinessRulesForm();と同様です。 businessRulesForm.Show(); ' – ManoDestra

+0

申し訳ありません...ありがとうございました.... –

1

はSubform.CSでこれを試してみてください:

private void Subform_FormClosing(object sender, FormClosingEventArgs e) 
    { 
     e.Cancel = true; 
     this.Hide(); 
    } 
+0

フォームを隠すこのコードを知っていますが、フォームを再びクリックすると閉じません。以前のセッションの値で開きます。 –

関連する問題