tengo el siguiente método:¿Mis controles no están siendo eliminados correctamente?
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!
}
}
}
Entonces me llamaron con esto:
[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");
}
}
}
Mi pregunta es, ¿por qué dentro de mi método Disposer mis controles se están eliminados, pero cuando puedo comprobar en el El método principal es regresar falso? Por cierto, el objeto "Prueba" es solo una clase simple que hereda de UserControl Gracias, saludos.
Tu código ni siquiera compilará. La clase 'System.Windows.Forms.Control' no expone un método' Dispose() '(aunque expone' IsDisposed'). –
@EdS ¿estás seguro? –
@Ed Erm sí lo hace http://msdn.microsoft.com/en-us/library/system.windows.forms.control.dispose.aspx –