none
Recorrer y validar textbox que estan dentro de un groupbox y este a su vez esta dentro de un formulario RRS feed

  • Pregunta

  • Buenos dias, muchachos tengo el siguiente dilema para que los guru del Visual.NET me ayuden; tengo textbox que se crean dinamicamente, por ejemplo yo selecciono en un combobox el numero de periodos y eso se traduce en el numero textbox que me aparecen en el groupbox, y cada uno de ellos tiene como AccessibleName "Demanda 1", "Demanda 2", etc, pero lo que me ocurre es lo siguiente, yo seleccione 4 periodos en el combobox, efectivamente me aparecen 4 textbox en el groupbox, diligencio el textbox 1 y 2 pero el 3 y el 4 no, despues oprimo el boton CALCULAR, y me aparece en un Msgbox "debe diligenciar la demanda del perido 3" la diligencio y oprimo CALCULAR me dice"debe diligenciar la demanda del perido 4", oprimo CALCULAR y me dice "debe diligenciar " pero no me dice de que item, y en el groupbox no veo que ponga en foco ninguno, por ende no se cual falta por diligenciar, intente adicionando en el msgbox el nombre del objeto pero me aparece es el nombre del formulario, y con el tab me aparece "0", todo esto con el fin de que antes que el software realice cualquier calculo matematico, valide si todos los datos estan diligenciados el Ing SoftJaen me ayudo con el siguiente codigo, al cual agradezco mucho:

    ''' <summary>
       
    ''' Obtiene una colección con los controles de un determinado
       
    ''' tipo existentes en un contenedor superior.
       
    ''' </summary>
       
    ''' <typeparam name="T">Tipo de control que se desea obtener.</typeparam>
       
    ''' <param name="parentContainer">Objeto Control que actua de
       
    ''' contenedor para el tipo de control que se desea obtener.</param>
       
    ''' <param name="includeInheritedControls">Indica si se incluyen en la
       
    ''' colección aquellos controles que heredan de la clase especificada.</param>
       
    ''' <returns></returns>
       
    ''' <remarks></remarks>
       
    Public Function GetTypeControls(Of T As Control)( _
            parentContainer
    As Control, includeInheritedControls As Boolean) As List(Of T)

           
    If (parentContainer Is Nothing) Then Return Nothing

           
    Dim controls As New List(Of T)

           
    ' System.Type para el tipo de dato especificado.
           
    '
           
    Dim typeT As Type = GetType(T)

           
    For Each ctrl As Control In parentContainer.Controls

               
    If (includeInheritedControls) Then
                   
    If (TypeOf ctrl Is T) Then _
                        controls
    .Add(DirectCast(ctrl, T))

               
    Else
                   
    ' System.Type del control.
                   
    '
                   
    Dim typeControl As Type = ctrl.GetType()
                   
    If (typeControl.Equals(typeT)) Then _
                        controls
    .Add(DirectCast(ctrl, T))

               
    End If

                controls
    .AddRange(Me.GetTypeControls(Of T)(ctrl, includeInheritedControls))

           
    Next

           
    Return controls

       
    End Function

    Dicho ésto, cuando desees recuperar todos los controles TextBox, ejecutarías lo siguiente:

     ' Obtenemos todos los controles TextBox que se encuentren
           
    ' tanto en el formulario como en cualquier otro control
           
    ' contenedor existente en el formulario actual.
           
    '
           
    Dim ctrls As List(Of TextBox) = Me.GetTypeControls(Of TextBox)(Me, False)

           
    For Each ctrl As Control In ctrls

               
    If (Not (TypeOf ctrl Is TextBox)) Then
                   
    ' Si el control no es del tipo TextBox,
                   
    ' continuamos el bucle.
                   
    '
                    Continue
    For
               
    End If

               
    ' El control es del tipo TextBox.
               
    '
               
    Dim tb As TextBox = DirectCast(ctrl, TextBox)

               
    ' Si el valor de la propiedad Tag es distinto
               
    ' de 1, continuamos el bucle.
               
    '
               
    If (CInt(tb.Tag) <> 1) Then Continue For

               
    ' Verificamos si tiene algo escrito.
               
    '
               
    If (tb.Text.Trim() = String.Empty) Then
                    MessageBox
    .Show("Debe de establecer el valor del " & tb.AccessibleName)
                    tb
    .BackColor = Color.Yellow
                    tb
    .Focus()
                    ValidaDatos
    = False
                   
    Return
               
    End If

               
    ' Hay algo escrito en el contro.
               
    '
                tb
    .BackColor = Color.White

           
    Next

    'Espero me puedan ayudar muchachos....

    martes, 29 de mayo de 2012 12:50