locked
Como validar que campos es el que se encuentra vacio y colorear RRS feed

  • Pregunta

  • Yo se que para validar algun textbox pueda estar vacio se hace:

    If Textbox1.Text.Trim().Length = 0 Or
       Textbox2.Text.Trim().Length = 0 Or
       Textbox3.Text.Trim().Length = 0 Or
       Textbox4.Text.Trim().Length = 0 Or
       Textbox5.Text.Trim().Length = 0 Or
       Textbox6.Text.Trim().Length = 0 Or
       ComboBox1.Text.Trim().Length = 0 then
       MsgBox("Complete los campos")
       Exit Sub
    End If

    pero si tengo muchos datos supongamos 100 textbox entre combobox en un solo formulario y se me hace dificil ubicarlos la idea es pinte los que me hayan queda vacios como puedo validar eso?

    Saludos



    viernes, 2 de marzo de 2018 14:28

Respuestas

  • "Javier Rocco" escribió:

    > Si esta dentro de un GroupBox

    Pues entonces, la referencia de ese control GroupBox es el que tienes que pasar al procedimiento ColorearTextBox. Pero para ello, primero tienes que modificar la firma de dicho procedimiento para que admita cualquier tipo de control contenedor: Form, GroupBox, Panel, etc.

    Friend Module NombreModulo
    
        Friend Sub ColorearTextBox(parent As Control, backColor As Color)
    
            For Each ctrl As Control In parent.Controls
    
                If ((TypeOf ctrl Is TextBox) OrElse (TypeOf ctrl Is ComboBox)) Then
                    ' El control es del tipo TextBox o ComboBox.
                    '
                    If (ctrl.Text.Trim().Length = 0) Then
                        ' La propiedad Text del control es una cadena de longitud cero.
                        ctrl.BackColor = backColor
    
                    Else
                        ' La propiedad Text tiene un valor válido.
                        ctrl.BackColor = Color.White
    
                    End If
    
                End If
    
            Next
    
        End Sub
    
    End Module
    

    En negrita las únicas modificaciones realizadas para que el procedimiento se adapte a cualquier control contenedor.

    Y llamarías al método ColorearTextBox especificando el nombre del control GroupBox que contiene los controles TextBox y ComboBox que deseas "colorear", entendiendo por "colorear" el modificar el valor de la propiedad BackColor de dichos controles con un color determinado:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            NombreModulo.ColorearTextBox(GroupBox1, Color.Red)
    
        End Sub
    


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Propuesto como respuesta Pablo Rubio domingo, 4 de marzo de 2018 3:56
    • Marcado como respuesta Javier Roque domingo, 4 de marzo de 2018 14:22
    sábado, 3 de marzo de 2018 14:46
    Moderador

Todas las respuestas

  • "Javier Rocco" preguntó:

    > ... pero si tengo muchos datos supongamos 100 textbox entre combobox en un
    > solo formulario y se me hace dificil ubicarlos la idea es pinte los que me
    > hayan queda vacios como puedo validar eso?

    Recorriendo la colección de controles del formulario y estableciendo el valor que desees a la propiedad BackColor del control cuya propiedad Text sea una cadena de longitud cero, tal y como muestra el siguiente ejemplo, el cual sería recomendable que lo insertaras en un Module a fin de que pudiera estar disponible para cualquier formulario de tu proyecto de Windows Forms:

    Friend Module NombreModulo
    
        Friend Sub ColorearTextBox(frm As Form, backColor As Color)
    
            For Each ctrl As Control In frm.Controls
    
                If ((TypeOf ctrl Is TextBox) OrElse (TypeOf ctrl Is ComboBox)) Then
                    ' El control es del tipo TextBox o ComboBox.
                    '
                    If (ctrl.Text.Trim().Length = 0) Then
                        ' La propiedad Text del control es una cadena de longitud cero.
                        ctrl.BackColor = backColor
    
                    Else
                        ' La propiedad Text tiene un valor válido.
                        ctrl.BackColor = Color.White
    
                    End If
    
                End If
    
            Next
    
        End Sub
    
    End Module
    

    Y ahora, desde un formulario cualquiera lo llamarías ejecutando lo siguiente:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            NombreModulo.ColorearTextBox(Me, Color.AliceBlue)
    
        End Sub
    

    ¡Eso es todo! Adapta el ejemplo a tus necesidades.

    Un saludo


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    viernes, 2 de marzo de 2018 14:55
    Moderador
  • No me lo pinta 
    viernes, 2 de marzo de 2018 16:35
  • "Javier Rocco" escribió:

    > No me lo pinta

    ¿Qué debo entender por "pintar"? Si por "pintar" te refieres a establecer un color determinado a la propiedad BackColor del control, el ejemplo que te he indicado cumple perfectamente con lo requerido. ¿Que a ti no te funciona? Pues vaya usted a saber lo que estás haciendo y cómo lo estás haciendo. Pero sin más detalles por tu parte, ignoro completamente el motivo para que el código no te funcione, o mejor dicho, no te "pinte" los controles. ;-)


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    viernes, 2 de marzo de 2018 17:10
    Moderador
  • ¿Cuál es el contenedor primario de los controles?.

    Si los controles se encuentran contenidos en un control como Panel, GroupBox, o cualquier otro contenedor, debes especificar el mismo como base de la colección a iterar, por ejemplo:

    For Each ctrl As Control In Panel1.Controls

    Si tienes varios contenedores o contenedores anidados entonces debes iterar por los contenedores de manera recursiva.

    viernes, 2 de marzo de 2018 17:26
  • Para que no te suceda lo que te dice William que tiene mucha razon, deberias considerer el control error provider que a mi entender esta mas orientado a lo que deseas hacer, recuerda que no necesariamente en un formulario por obligacion se llenan todos los campos del mismo y el error provider te da una forma mas professional a mi entender de manejar este asunto de campos en blanco, exito
    viernes, 2 de marzo de 2018 18:49
  • Si esta dentro de un GroupBox
    viernes, 2 de marzo de 2018 20:16
  • "Javier Rocco" escribió:

    > Si esta dentro de un GroupBox

    Pues entonces, la referencia de ese control GroupBox es el que tienes que pasar al procedimiento ColorearTextBox. Pero para ello, primero tienes que modificar la firma de dicho procedimiento para que admita cualquier tipo de control contenedor: Form, GroupBox, Panel, etc.

    Friend Module NombreModulo
    
        Friend Sub ColorearTextBox(parent As Control, backColor As Color)
    
            For Each ctrl As Control In parent.Controls
    
                If ((TypeOf ctrl Is TextBox) OrElse (TypeOf ctrl Is ComboBox)) Then
                    ' El control es del tipo TextBox o ComboBox.
                    '
                    If (ctrl.Text.Trim().Length = 0) Then
                        ' La propiedad Text del control es una cadena de longitud cero.
                        ctrl.BackColor = backColor
    
                    Else
                        ' La propiedad Text tiene un valor válido.
                        ctrl.BackColor = Color.White
    
                    End If
    
                End If
    
            Next
    
        End Sub
    
    End Module
    

    En negrita las únicas modificaciones realizadas para que el procedimiento se adapte a cualquier control contenedor.

    Y llamarías al método ColorearTextBox especificando el nombre del control GroupBox que contiene los controles TextBox y ComboBox que deseas "colorear", entendiendo por "colorear" el modificar el valor de la propiedad BackColor de dichos controles con un color determinado:

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    
            NombreModulo.ColorearTextBox(GroupBox1, Color.Red)
    
        End Sub
    


    Enrique Martínez Montejo
    [MS MVP - Visual Studio y Tecnologías de Desarrollo]

    Nota informativa: La información contenida en este mensaje, así como el código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o sugerido en el presente mensaje.

    Si esta respuesta le ha resultado útil, recuerde marcarla como satisfactoria.

    Si usas Visual Basic .NET y deseas ser productivo y feliz, se inteligente y activa la instrucción
    Option Strict.

    • Propuesto como respuesta Pablo Rubio domingo, 4 de marzo de 2018 3:56
    • Marcado como respuesta Javier Roque domingo, 4 de marzo de 2018 14:22
    sábado, 3 de marzo de 2018 14:46
    Moderador
  • Si funciono pero sombrea el textbox de busqueda y no lo que deben ser xD en fin lo hace no me salia porque no habia cambiado NombreModulo por el mio.

    Bueno si sale nada mas que como dije toma a otro y no los que quiero sean justamente toma al que esta fuera del groupbox.

    Ahora probando lo que indicas esta bien 

    Gracias

    domingo, 4 de marzo de 2018 14:22