Colabora
 

Buscar un control en un formulario windows

 

Fecha: 07/Feb/2008 (06-02-08)
Revisado: 11/Feb/2008
Autor: Edison Moreno - edisonmoreno@gmail.com

 


Introducción

En ocasiones se nos hace necesario recorrer los controles que contiene un formulario windows, bien sea para acceder a sus propiedades mediante código en tiempo de ejecución. Existen formas conseguir este objetivo una de ellas es la propiedad Controls, cuya propiedad la contienen todos los controles que son contenedores.

 

Contenido

Para realizar este desarrollo se utilizarán la propiedad colección Controls, y la propiedad HasChildren

El código:

Lo primero que se debe hacer es recorrer los controles del contenedor que se especifica en los parametros, esto lo hacemos con el comando For Each

Luego debemos preguntar si el control actual es el control que buscamos esto lo realizamos comparando el nombre del control actual con el nombre especificado en el parametro. En el caso de haber hallado el control requerido, nos salimos del bucle con el comando Exit For, pero antes asignamos el valor del control para posteriormente retornarlo.

El siguiente paso consta de utilizar HasChildren para validar si el control actual es un contenedor, ya que de ser asi llamamos nuestra función nuevamente enviando como paramentros el mismo nombre, pero como contenedor enviamos el control que estamos evaluando actualmente, esto es lo que se llama recursividad. Acá nos detenemos evaluamos si la recursividad nos devuelve algún control, para salirnos del bucle For Each o retornar el control hallado

A continuación sigue código en Visual Basic .Net 2005:

Private Function ControlBuscar(ByVal Nombre As String, ByVal Contenedor As Control) As Control
    Dim ctrControl As Control = Nothing

    For Each ctrBuscado As Control In Contenedor.Controls
        If ctrBuscado.Name.ToUpper = Nombre.ToUpper Then
            ctrControl = ctrBuscado
            Exit For
        End If

         If ctrBuscado.HasChildren Then
            ctrControl = Me.ControlBuscar(Nombre, ctrBuscado)
            If Not ctrControl Is Nothing Then
                Exit For
            End If
        End If
     Next

    Return ctrControl
End Function

A continuación un ejemplo de la utilización del código:

Dim ctrControl As Control
objControl = Me.ControlBuscar("btnGrabar", Me)
If  objControl Is Nothing Then
    MessageBox.Show("Control NO hallado")
Else  
    MessageBox.Show("Control encontrado")
End If

Bueno no siendo más y esperando que esto les sirva de ayuda, me despido desde Medellín - Colombia

Espacios de nombres usados en el código de este artículo:

System.Windows.Forms

 



Compromiso del autor del artículo con el sitio del Guille:

Lo comentado en este artículo está probado (y funciona) con la siguiente configuración:

El autor se compromete personalmente de que lo expuesto en este artículo es cierto y lo ha comprobado usando la configuración indicada anteriormente.

En cualquier caso, el Guille no se responsabiliza del contenido de este artículo.

Si encuentras alguna errata o fallo en algún link (enlace), por favor comunícalo usando este link:

Gracias.



Ir al índice principal de el Guille