none
CONDICION SGÚN NOMBRE GROUPBOX RRS feed

  • Pregunta

  • Hola,

    Tengo una función que recorre múltiples GroupBox en los cuales se encuentran TextBox y de los exporto su información a un .txt.

    Esta función me va correctamente. El problema es que hay algunos GroupBox que cuando inserto un valor en sus TextBox se debe hacer una operación con este valor, entonces lo que hago es dar un nombre diferente a este GroupBox y cuando lo añado a la función digo que si está este GroupBox con el nombre que yo le he puesto, pues que también me lo exporte al .txt.

    El problema esta que, si la Forma en la que yo llamo esta función no se encuentra el GB con el nombre que yo le he dado, me salta la excepción de Null reference... No se como solucionarlo ya que la misma función la quiero utilizar en varias formas las cuales no contienen el GB con ese nombre. 

    Básicamente lo que quiero es que si no encuentra el GB con ese nombre, simplemente no haga nada. 

    Muchas gracias 

    miércoles, 6 de abril de 2016 6:19

Respuestas

  • No se como estarás recorriendo los controles pero puedes recorrer los GroupBox comprobando el nombre del control. Algo como esto:

    Dim Ctrls As List(Of GroupBox) = GetTypeControls(Of GroupBox)(Me, False)
    
    For Each Ctrl As Control In Ctrls
    
        If (Not (TypeOf Ctrl Is GroupBox)) Then
        ' Si el control no es GroupBox sigue el bucle
                    
           Continue For
        End If
    
        Dim CtrlGroupBox As GroupBox = DirectCast(Ctrl, GroupBox)
    
        If CtrlGroupBox.Name = "NombreBuscado" Then
    
            ' Aquí haces el proceso que quieras
    
        End If
    
    Next


    Saludos, Javier J

    miércoles, 6 de abril de 2016 6:47
  • Pero puedes hacer el siguiente método para obenter cualquier tipo de objeto en tu formulario y luego buscar por nombre

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Dim groupBoxes = GetTypeControls(Me, GetType(GroupBox))
    
            Dim groupboxToSearch As String = "groupBox1"
    
            Dim groupbox = groupBoxes.Where(Function(g) g.Name = groupboxToSearch)
    
            If groupbox IsNot Nothing Then
                MessageBox.Show([String].Format("Found GroupBox {0}", groupboxToSearch))
            End If
    
        End Sub
    
    
        Public Function GetTypeControls(control As Control, type As Type) As IEnumerable(Of Control)
            Dim controls = control.Controls.Cast(Of Control)()
    
            Return controls.SelectMany(Function(ctrl) GetTypeControls(ctrl, type)).Concat(controls).Where(Function(c) c.[GetType]() = type)
        End Function
        
    
    End Class


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 6 de abril de 2016 8:31

Todas las respuestas

  • No se como estarás recorriendo los controles pero puedes recorrer los GroupBox comprobando el nombre del control. Algo como esto:

    Dim Ctrls As List(Of GroupBox) = GetTypeControls(Of GroupBox)(Me, False)
    
    For Each Ctrl As Control In Ctrls
    
        If (Not (TypeOf Ctrl Is GroupBox)) Then
        ' Si el control no es GroupBox sigue el bucle
                    
           Continue For
        End If
    
        Dim CtrlGroupBox As GroupBox = DirectCast(Ctrl, GroupBox)
    
        If CtrlGroupBox.Name = "NombreBuscado" Then
    
            ' Aquí haces el proceso que quieras
    
        End If
    
    Next


    Saludos, Javier J

    miércoles, 6 de abril de 2016 6:47
  • El código de Javier se puede realizar de otra forma más escueta

    Dim groupboxToSearch As String = "groupBox1"
    
    Dim groupbox = Me.Controls.OfType(Of GroupBox)().Where(Function(g) g.Name = groupboxToSearch)
    
    If groupbox IsNot Nothing Then
       MessageBox.Show([String].Format("Found GroupBox {0}", groupboxToSearch))
    End If


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 6 de abril de 2016 8:21
  • Pero puedes hacer el siguiente método para obenter cualquier tipo de objeto en tu formulario y luego buscar por nombre

    Public Class Form1
    
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            Dim groupBoxes = GetTypeControls(Me, GetType(GroupBox))
    
            Dim groupboxToSearch As String = "groupBox1"
    
            Dim groupbox = groupBoxes.Where(Function(g) g.Name = groupboxToSearch)
    
            If groupbox IsNot Nothing Then
                MessageBox.Show([String].Format("Found GroupBox {0}", groupboxToSearch))
            End If
    
        End Sub
    
    
        Public Function GetTypeControls(control As Control, type As Type) As IEnumerable(Of Control)
            Dim controls = control.Controls.Cast(Of Control)()
    
            Return controls.SelectMany(Function(ctrl) GetTypeControls(ctrl, type)).Concat(controls).Where(Function(c) c.[GetType]() = type)
        End Function
        
    
    End Class


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    miércoles, 6 de abril de 2016 8:31