私は、次の方法があります。その後、私はこれでそれを呼ばコントロールが正しく処分されていませんか?
public static void Disposer(Control.ControlCollection controls)
{
foreach (Control c in controls)
{
if (c.HasChildren)
Disposer(c.Controls);
if ((c is UltraNumericEditor)
|| (c is UltraComboEditor)
|| (c is UltraTextEditor)
|| (c is UltraDateTimeEditor)
|| (c is UltraCheckEditor)
|| (c is UltraGrid)
|| (c is UltraStatusBar))
{
c.Dispose();
var x = c.IsDiposed; // this is true!
}
}
}
を:
[STAThread]
static void Main()
{
Test forma = new Test();
forma.Controls.Add(new UltraStatusBar());
forma.Controls.Add(new UltraStatusBar());
forma.Controls.Add(new UltraNumericEditor());
forma.Controls.Add(new UltraComboEditor());
forma.Controls.Add(new UltraTextEditor());
forma.Controls.Add(new UltraTextEditor());
forma.Controls.Add(new UltraDateTimeEditor());
forma.Controls.Add(new UltraTimeZoneEditor());
forma.Controls.Add(new UltraGrid());
Disposer(forma.Controls);
foreach (Control control in forma.Controls)
{
if (control.IsDisposed)//this is false now!
{
Debug.Write(control.Name + " was disposed");
}
}
}
私の質問は、なぜ私のディスポーザーメソッド内で自分のコントロールが配置になっているが、私は、チェックイン時にメインメソッドはfalseを返していますか? ところで、 "テスト"オブジェクトはUserControlから継承する単純なクラスです ありがとうございます。
コードはコンパイルされません。 'System.Windows.Forms.Control'クラスは、' Dispose() 'メソッドを公開しません(ただし、' IsDisposed'を公開します)。 –
@EdSあなたは本当ですか? –
@Edはいはいいいえhttp://msdn.microsoft.com/en-us/library/system.windows.forms.control.dispose.aspx –