2016-04-28 23 views
-1

特定のイベントでメインフォームを非表示にしてから、もう一度表示しようとしています。問題は、私がそれを隠すとフォームが破棄されるということです。フォームを隠そうとしたときに廃棄される

フォームを隠すための私のコード: "this.Show()" メソッドが呼び出されると

private void MessageRecived(object sender) 
{ 
    //Do stuff 

    if (status == NetConnectionStatus.Connected) 
    { 
     this.Hide(); 
    } 
    else if (status == NetConnectionStatus.Disconnected) 
    { 
     this.Show(); 
    } 

    //Do some more stuff 
} 

、次の例外がスローされます。

System.ObjectDisposedException

追加情報:廃棄オブジェクトにアクセスすることはできません。

私はまた、「偽this.Visible =」と「this.SetVisibleCore(偽)」を使用しようとしましたが、私は同じ結果を得ます。

フォームを削除せずにフォームを非表示にするにはどうすればよいですか?

EDIT:

私は私のミスを見つけた:そこのフォームを参照する私のコード内のオブジェクトがあって、それを閉じました。他の何かがこのフォームを使用していると指摘したJustin Harveyに感謝します。

+1

無関係ですが、if文で同等かどうかをチェックしていないので、ステータスを割り当てています。それらを 'status == NetConnectionStatus.Connected'と' status == NetConnectionStatus.Disconnected'に変更してください。また、 'Control.Hide'は設計通りに処理されないので、' 'Do stuff'と' 'もっとやることをやっています ''で何が起こっていますか? – AntiTcb

+3

それを処理している隠れているのではありません、フォームを使用するコードを表示できますか? –

+0

@AlexGravelyあなたは正しいです、私はそれを修正します – user6262616

答えて

0

あなたのフォームはガベージコレクタまたは他のコードによって廃棄されているようです。私は次のような実験を行ってきましたし、それがうまく機能

protected override void Dispose(bool disposing) 

方法(usualy NAME.Designer.csファイル内)

で セットアップブレークポイント!

  1. FormClosingイベントハンドラ
  2. Tickイベントハンドラ
  3. は、次のコード作成時間を追加フォームデザイナでメインフォーム上

  4. 置き時間
  5. を新しいWindwsFormsアプリケーションを作成します。

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
    { 
        if (MessageBox.Show("Press Yes to Hide only the Form?", "Exit", MessageBoxButtons.YesNo) == 
         DialogResult.Yes) 
        { 
         e.Cancel = true; 
         timer1.Enabled = true; 
         Hide(); 
        } 
    } 
    
    private void timer1_Tick(object sender, EventArgs e) 
    { 
        Show(); 
        timer1.Enabled = false; 
    } 
    
+0

問題を追跡する手助けをしました - フォームを参照して処分したオブジェクトがありました。 – user6262616

関連する問題