2012-03-09 10 views
2

サブクラス化されたフォームオブジェクトの関数を記述したいと思います。この関数はフォームを閉じてそのフォーム上にあるコントロールを返さなければならないので、別のフォームに置くことができます。フォームを閉じたときに特定のコントロールを破棄しないようにするにはどうすればよいですか?

処理が制御されないようにするのに問題があります。私は、this.Controls.Remove(someControl)を使用してコントロールコレクションから削除すると、処分を中止するのに十分だと思っていましたが、それでも処分されます。

私のコントロールを無効にしないようにフォームに指示するには、ほかに何が必要ですか?

以前は、元のフォームが閉じられる前に、他のフォームにコントロールを追加しました。これは処分をやめさせるようだった。これを行うコードはもっと面倒ですが、私は実際には、他のフォームにコントロールを追加する前に元のフォームを閉じることによって物事を単純化したいと思います。

ありがとうございます!

+2

Owningオブジェクトを破棄する前に、コントロールのOwnerプロパティがnullに設定されていますか? – akhisp

+0

どの所有者のプロパティですか?私はそれを見つけることができません。 –

+1

申し訳ありませんが、私はParentプロパティを意味しました。 – akhisp

答えて

5

Parentオブジェクトを破棄する前に、子コントロールのParentプロパティをnullに設定します。

2

なぜあなたはそれを処分しないようにしていますか?あなたがもはやそれを参照していない場合、それは処分されます。したがって、コード内で参照を保持しておけば、将来的に再度使用する予定であることを示すように、それが破棄されないようにする必要があります。

+0

私はそれを静的クラスで参照しています。しかし、それは十分ではないようです... –

+0

私はちょうど別のフォームに移動したいので処分できません。他のフォームで処理しようとすると、オブジェクトの例外を処理できません。 –

+0

インスタンスクラスのグローバル変数として追加してみますか?静的クラスの内部では、グローバル参照かメソッド内参照ですか? –

関連する問題