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....