none
ErrorProvider & ValidateChildren (VB.NET) RRS feed

  • Pregunta

  • Hola amigos del foro,<o:p></o:p>

                                        Quiero contarle que tengo una duda  y quizás ustedes me puedan ayudar.

    Actualmente tengo un formulario con un errorprovider, varias cajas de texto y 1 combobox, lo que he intentado es que cuando haga el clic al botón guardar, NO se ejecute la instrucción hasta que todos los controles este sin un errorprovider activo. 

    El problema está en que aun cuando los  errorprovider están activos, la instrucción del botón guardar igual se ejecuta.<o:p></o:p>

    De antemano muchas gracias.


    Saludos desde Chile.

    sábado, 4 de junio de 2016 22:38

Respuestas

  • Deberías recorrer todos los ErrorProviders para comprobar si tienen algún error antes de guardar.

    Puedes crearte una función Validate que compruebe el valor del método GetError de cada ErrorProvider y devuelva un valor boolean en función de si alguno tiene error o no.

    Luego, en el código del botón guardar no tendrías más que comprobar el valor de esta función:

    If Validate() Then
       .....
       Resto código guardar
       .....
    End If


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Aprendiz_Chile lunes, 6 de junio de 2016 12:32
    domingo, 5 de junio de 2016 8:47
  • Hola:
    En un Form con 2 TextBox, 1 ComboBox, 1 Button y 1 ErrorProvider, copia y pega el siguiente codigo
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            Me.ComboBox1.Items.Add("")
            Me.ComboBox1.Items.Add("PRIMERO")
            Me.ComboBox1.Items.Add("SEGUNDO")
            Me.AutoValidate = Windows.Forms.AutoValidate.EnableAllowFocusChange
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If Me.ValidateChildren = False Then
                MessageBox.Show("Datos erroneos", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Return
            Else
                MessageBox.Show("Datos correctos", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        End Sub
        Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
            If Me.TextBox1.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProvider1.SetError(Me.TextBox1, "Introduzca el TextBox1")
            Else
                Me.ErrorProvider1.SetError(Me.TextBox1, Nothing)
            End If
        End Sub
        Private Sub txtTextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating
            If Me.TextBox2.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProvider1.SetError(Me.TextBox2, "Introduzca el TextBox2")
            Else
                Me.ErrorProvider1.SetError(Me.TextBox2, Nothing)
            End If
        End Sub
        Private Sub ComboBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ComboBox1.Validating
            If Me.ComboBox1.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProvider1.SetError(Me.ComboBox1, "Seleccione el ComboBox1")
            Else
                Me.ErrorProvider1.SetError(Me.ComboBox1, Nothing)
            End If
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    domingo, 5 de junio de 2016 9:31
  • Hola:
    Prueba a poner las siguintes lineas

        Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
            Me.AutoValidate = Windows.Forms.AutoValidate.Disable
        End Sub

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Aprendiz_Chile lunes, 6 de junio de 2016 12:31
    lunes, 6 de junio de 2016 5:44

Todas las respuestas

  • Deberías recorrer todos los ErrorProviders para comprobar si tienen algún error antes de guardar.

    Puedes crearte una función Validate que compruebe el valor del método GetError de cada ErrorProvider y devuelva un valor boolean en función de si alguno tiene error o no.

    Luego, en el código del botón guardar no tendrías más que comprobar el valor de esta función:

    If Validate() Then
       .....
       Resto código guardar
       .....
    End If


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta Aprendiz_Chile lunes, 6 de junio de 2016 12:32
    domingo, 5 de junio de 2016 8:47
  • Hola:
    En un Form con 2 TextBox, 1 ComboBox, 1 Button y 1 ErrorProvider, copia y pega el siguiente codigo
    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
            Me.ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList
            Me.ComboBox1.Items.Add("")
            Me.ComboBox1.Items.Add("PRIMERO")
            Me.ComboBox1.Items.Add("SEGUNDO")
            Me.AutoValidate = Windows.Forms.AutoValidate.EnableAllowFocusChange
        End Sub
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            If Me.ValidateChildren = False Then
                MessageBox.Show("Datos erroneos", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Return
            Else
                MessageBox.Show("Datos correctos", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        End Sub
        Private Sub TextBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox1.Validating
            If Me.TextBox1.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProvider1.SetError(Me.TextBox1, "Introduzca el TextBox1")
            Else
                Me.ErrorProvider1.SetError(Me.TextBox1, Nothing)
            End If
        End Sub
        Private Sub txtTextBox2_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox2.Validating
            If Me.TextBox2.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProvider1.SetError(Me.TextBox2, "Introduzca el TextBox2")
            Else
                Me.ErrorProvider1.SetError(Me.TextBox2, Nothing)
            End If
        End Sub
        Private Sub ComboBox1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ComboBox1.Validating
            If Me.ComboBox1.Text.Length = 0 Then
                e.Cancel = True
                Me.ErrorProvider1.SetError(Me.ComboBox1, "Seleccione el ComboBox1")
            Else
                Me.ErrorProvider1.SetError(Me.ComboBox1, Nothing)
            End If
        End Sub
    End Class

    Un saludo desde Bilbo
    Carlos

    domingo, 5 de junio de 2016 9:31
  • Hola J. Carlos Herrero, muchas gracias,

                                       Con tu ejemplo me queda más claro el tema, sin embargo hay algo que no me deja tranquilo. Por ejemplo, cuando le doy clic al botón y existen campos con los  errorprovider activo y ninguno de ellos tiene un focus por parte del usuario, puedo cerrar el formulario, pero si en las mismas condiciones mencionadas anteriormente a diferencia que  tengo el focus en un textbox con el errorprovider activo, no puedo cerrar el formulario desde la 'x'.

     A que se deberá?

    Como puedo solucionar ese tema?.

    Saludos


    Saludos desde Chile.


    domingo, 5 de junio de 2016 14:45
  • Hola:
    Prueba a poner las siguintes lineas

        Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing
            Me.AutoValidate = Windows.Forms.AutoValidate.Disable
        End Sub

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Aprendiz_Chile lunes, 6 de junio de 2016 12:31
    lunes, 6 de junio de 2016 5:44
  • Amigo,  muchas gracias por tu ayuda.

    Bendiciones.


    Saludos desde Chile.

    lunes, 6 de junio de 2016 12:32
  • Muchas gracias,

    Es lo que estaba buscando.

    Bendiciones.


    Saludos desde Chile.

    lunes, 6 de junio de 2016 12:32