Mam następujący sposób:Moje elementy sterowania nie są prawidłowo utylizowane?
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!
}
}
}
Potem nazwał go z tym:
[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");
}
}
}
Moje pytanie brzmi, dlaczego w moim sposobie dysponenta moi kontrole są coraz wyrzucać, ale kiedy sprawdzić w główna metoda zwraca false? Przy okazji obiekt "Test" jest po prostu prostą klasą dziedziczącą po UserControl Dzięki, pozdrawiam.
Twój kod nie będzie się nawet kompilował. Klasa 'System.Windows.Forms.Control' nie eksponuje metody" Dispose() "(mimo że eksponuje' IsDisposed'). –
@EdS czy jesteś tego pewien? –
@Ed Erm tak to robi http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dispose.aspx –