typeof vs if... y el limpiado (clear) de controles

leyendo el post de JuanFco, Limpiar informacion de los controles (TextBox's) Rapidamente, y debido a que mi comentario se puso muy técnico, aproveche para hacer un post.

Cuanto tenía que hacer este tipo de cosas, limpiar masivamente usaba el mismo código pero con la comparación distinta, que me paso un amigo en un proyecto:

if ( c.GetType() == typeof(TextBox) ) {
    c.Text = "";
}

Según la definición de "is" <http://msdn2.microsoft.com/es-es/library/scekt9xw(VS.80).aspx> realiza una conversión para comprobar si "c" es del tipo TextBox (según lo que interprete, salvo que el "y" sea conclusión y no conjunción :S). Parece que tiene más utilidad cuando vas a realizar conversiones y quieres comprobar si ese tipo es el que tu quieres.

Estuve probando los tiempos de diferencia y sólo en casos muy extremos hay ligera diferencia donde "is" toma unas milesimas de segundo más que "typeof".

Y cómo todos ustedes se deben estar preguntando entonces, que uso typeof o is?, pués ya iba a terminar de enviar el comentario, y lanzar una idea de sentido común, y era que is podría reconocer herencia de clases. Y nada le puse manos a la obra, y mi sentido común tenia razón, is reconoce herencia:

Falso, de toda falsedad: ( textBox1.GetType() == typeof(Control) )

Comprobado, is reconoce herencia: ( textBox1 is Control )

Saludos,


Post cruzado
Published 14/12/2006 14:01 por Sergio Tarrillo
Archivado en: ,
Comparte este post:
http://geeks.ms/blogs/sergiotarrillo/archive/2006/12/14/7518.aspx

Comentarios

# re: typeof vs if... y el limpiado (clear) de controles

Este tipo de verificación la uso yo bastante al examinar nodos de un control de árbol (TreeView). La idea es que en un árbol habrá mucho nodos pero normalmente sólo unos pocos tipos de ellos y puede ser conveniente realizar algo al seleccionar un tipo de nodo, por ejemplo un nodo que represente a un Usuario. Entonces se puede heredar de la clase TreeNode para crear por ejemplo la clase UserTreeNode, a la que asociar, por ejemplo, un icono. Luego, en cualquiera de los eventos relacionados con un nodo, se puede reaccionar muy facilmente ante el tipo de nodo ('is UserTreeNode'), sin necesidad de comprobar textos, tags y demás.

Alejandro mezcua

Thursday, December 14, 2006 8:27 PM por Alejandro Mezcua

# re: typeof vs if... y el limpiado (clear) de controles

Hola Sergio.

Tendria que probar esa forma que expones, se ve muy interesante.

Saludos

Thursday, December 14, 2006 8:50 PM por Juan Fco. Berrocal

# re: typeof vs if... y el limpiado (clear) de controles

Gracias por el escenario Alejandro!

Saludos,

Friday, December 22, 2006 3:40 PM por Sergio Tarrillo

# re: typeof vs if... y el limpiado (clear) de controles

Interesante blog, Sergio. Aprovecho para comentar el código que uso para formularios con muchos controles y que el usuario quiere limpiar. Es muy efectivo. Saludos. (Espero que no se descuajaringue el código al pegarlo), jeje.

       /// <summary>Recorre de forma recursiva todos los controles de un Control contenedor (y sus hijos)

       /// y borra el contenido de aquellos que sean de tipo TextBox, CheckBox y RadioButton.</summary>

       /// <param name="objContenedor">Control a recorrer para limpiarlo de datos.</param>

       private void LimpiarFormulario(Control objContenedor)

       {

           // para cada control contenido en la colección

           foreach (Control obj in objContenedor.Controls)

           {

               // si tiene hijos, recórrelos de forma recursiva

               if (obj.HasChildren)    LimpiarFormulario(obj);

               if (obj is TextBox)     ((TextBox)obj).Text = "";

               if (obj is CheckBox)    ((CheckBox)obj).Checked = false;

               if (obj is RadioButton) ((RadioButton)obj).Checked = false;

           }

       }

Friday, December 29, 2006 12:21 PM por Ricardo V.M.

# re: typeof vs if... y el limpiado (clear) de controles

Hola Ricardo!

Excelente código, y la recursividad que cae a pelo.

Esto es ideal para formularios con varios contenedores, y estos a su vez mas contenedres. Ojo esto no quiere decir, que no se aplique a un sólo contenedor, sino que en esos se ve le ve mayor utilidad que los otros metodos presentados.

Ahora sólo falta un código donde limpe sólo los controles que tu decidas sólo textbox, o textbox y checkbox, o otros ...

Saludos,

Wednesday, January 31, 2007 8:02 PM por Sergio Tarrillo

# re: typeof vs if... y el limpiado (clear) de controles

Hola Espinete!, claro que se puede hacer, el limpiar es sólo un método que se puede implementar, el código para los otros controles, sugería que alguien más lo realize y lo públique :D.

Saludos,

Saturday, July 07, 2007 9:21 PM por Sergio Tarrillo

# re: typeof vs if... y el limpiado (clear) de controles

Bueno, aqui esta tu verdadera prueba ya te dieron las bases espinete, con eso puedes hacerlo sino nunca seras un programador, es cuestion de buscarle las propiedades a los controles y jugar con ellas

Tuesday, August 05, 2008 4:30 PM por Juan Manuel

# re: typeof vs if... y el limpiado (clear) de controles

hola, que tal?

Thursday, May 21, 2009 12:49 PM por hola

# re: typeof vs if... y el limpiado (clear) de controles

Tenía un problema a la hora de limpiar los controles que contenían más controles, y gracias a este post pude resolverlo. Ahora puedo limpiar hasta formularios MDI. Muchas gracias por vuestra ayua indirecta ;)

Saturday, November 13, 2010 11:44 AM por Desconocido1234