• Domingo 22 de Diciembre de 2024, 12:46

Autor Tema:  validar  (Leído 5273 veces)

alexis17

  • Miembro MUY activo
  • ***
  • Mensajes: 378
    • Ver Perfil
    • http://www.codigobasico.net
validar
« en: Viernes 4 de Julio de 2008, 05:44 »
0
buenas noches que tal, esto es algo basico que aun no se como hacerlo

queria saber un ejemplo de como recorrer un formulario o un panel que tenga com oejemplo 5 texbox y 2 combobox

para poder verificar si tengo algun campo vacio entonces mandarle un msgbox indicandole que el campo debe llenarlo
lo que yo hacia antes era preguntar uno por uno para verificar si el campo estaba basio pero demora mucho y no creo que sea lo mejor si fueran 30 texbox


yo hacia algo asi
        If txt_nombre.Text = ""  Then
            MsgBox("Debe introducir el nombre")
        End If



la cosa es que no tengo clara la idea de como recorrerlos, si ya tengo que decirle son son 5 texbox mas 2 combobox asi que as
 un for asi


mi idea es hacer algo asi

        Dim i, j As Integer

        Dim resul As String

        j = Me.Controls.Count()



        For i = 0 To j

            resul = Mid(Me.Text, 1, 3)
            If resul = "txt" Then

                MsgBox("debe completar los campos")
            End If
        Next


esta parte es para preguntarle si el control comiensa con el nombre txt entonces me que me extraiga las 3 primeras letras para preguntar si es un txt si es txt entonces le pregunto si el campo es basio si es basio entonces le mando el mensaje de abvertencia
Cada dia aprendo algo nuevo

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: validar
« Respuesta #1 en: Viernes 4 de Julio de 2008, 06:17 »
0
Cita de: "alexis17"
buenas noches que tal, esto es algo basico que aun no se como hacerlo

queria saber un ejemplo de como recorrer un formulario o un panel que tenga com oejemplo 5 texbox y 2 combobox

para poder verificar si tengo algun campo vacio entonces mandarle un msgbox indicandole que el campo debe llenarlo
lo que yo hacia antes era preguntar uno por uno para verificar si el campo estaba basio pero demora mucho y no creo que sea lo mejor si fueran 30 texbox


yo hacia algo asi
        If txt_nombre.Text = ""  Then
            MsgBox("Debe introducir el nombre")
        End If



la cosa es que no tengo clara la idea de como recorrerlos, si ya tengo que decirle son son 5 texbox mas 2 combobox asi que as
 un for asi


mi idea es hacer algo asi

        Dim i, j As Integer

        Dim resul As String

        j = Me.Controls.Count()



        For i = 0 To j

            resul = Mid(Me.Text, 1, 3)
            If resul = "txt" Then

                MsgBox("debe completar los campos")
            End If
        Next


esta parte es para preguntarle si el control comiensa con el nombre txt entonces me que me extraiga las 3 primeras letras para preguntar si es un txt si es txt entonces le pregunto si el campo es basio si es basio entonces le mando el mensaje de abvertencia
yo usaría un ErrorProvider, creas un handler para el evento validating con el código de validación y le asignás ese handler a todos los TextBox. La forma de saber cual es el TextBox que estás validando es mas o menos así:

Código: Text
  1. private void tbxNoNulo_Validating(object sender, CancelEventArgs e)
  2.         {
  3.             if (((TextBox)sender).Text == "")
  4.             {
  5.                 epManejadorDeErrores.SetError(((TextBox)sender), "El TextBox no puede quedar en blanco");
  6.             }
  7.         }
  8.  
Está en C# pero te puede servir para darte una idea.
epManejadorDeErrores es un ErrorProvider

Salute
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

alexis17

  • Miembro MUY activo
  • ***
  • Mensajes: 378
    • Ver Perfil
    • http://www.codigobasico.net
Re: validar
« Respuesta #2 en: Viernes 4 de Julio de 2008, 06:49 »
0
hola que tal,

intente traducir el metodo asi pero manda error

   Sub tbxNoNulo_Validating(ByVal sender As System.Object, ByVal e As System.EventArgs)

            if (((TextBox)sender).Text == "")then


                manejadorerror.SetError(((TextBox)sender), "El TextBox no puede quedar en blanco");
        End If
    End Sub

dice que texbox es un tipo y no puede ser utilizado como exprecion
Cada dia aprendo algo nuevo

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: validar
« Respuesta #3 en: Viernes 4 de Julio de 2008, 14:54 »
0
Cita de: "alexis17"
hola que tal,

intente traducir el metodo asi pero manda error

   ... dice que texbox es un tipo y no puede ser utilizado como exprecion

cuando alguien dice 'traducir' nunca quiere decir literalmente, siempre hay que salvar las 'distancias' entre lenguajes. No hace mucho en otro lugar a uno le indiqué una función que usaba VarPTR y el tipo lo tradujo a VB 2005 literalmente, obvimanete no lo funcionó porque esa función no existe, sin embargo es plenamente traducible pués existe AddressOf, que es el equivalente.

Veamos, tu caso es similar... traduces literalmente reúne todos los textbox en una misma función y todos los combobox en otra si aún quieres juntar diferentes tipos en una misma función puesdes usar 'id TypeOf(objeto) is 'objeto' luego... elseif typeOf... con lo cual discriminas posibles situaciones por ejemplo la propiedad imagen de un picturebox que no guarda relación con la propiedad text de un textbox o la propiedad item de un combo....

En el código presentado debes poner simplemente (corrige la línea con esto...)

Código: Text
  1. if sender.text = "" then  
  2. throw new exception("El campo de " & sender.name & "no puede quedar vacío")
  3.  
  4.  
  5.  
Nota que todos los textbox que deseas deben estar apuntados a dicho manejador.... al final del sub el 'Handles text1.validating, ....text45.validating, text46.validating ejemplo:

Código: Text
  1. Private Sub ValidarVariosTextos_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Textbox1.Validating, Handles Textbox2.Validating, Handles Textbox3.Validating
  2.   ' el código anterior de verificación
  3. End Sub
  4.  
«Ma non troppo»
----> ModoVacaciones = False<----

dlplenin

  • Miembro activo
  • **
  • Mensajes: 44
  • Nacionalidad: ec
    • Ver Perfil
Re: validar
« Respuesta #4 en: Viernes 4 de Julio de 2008, 22:38 »
0
hola
no te entendi la parte de  "nombre txt entonces me que me extraiga las 3 primeras letras para preguntar si es un txt "
peo para lo demas esto te puede servir:



'este codigo va en una clase
'es importante poner en la función los parametros q reciba como Byref

 Public Shared salida As Boolean = True
    ''' <summary>
    ''' Controlar que las cajas de texto/mascaras con la propiedad Tag=* esten llenas
    ''' </summary>
    ''' <param name="Form_Controlw">Form, siempre se debera poner: Me</param>
    ''' <param name="errorprovider_">Se debe agregar un objeto del tipo ErrorProvider al form para pasarlo a este</param>
    Public Shared Function camposObligatoriosCajas(ByRef Form_Controlw As Control, ByRef errorprovider_ As ErrorProvider) As Boolean
        Try
            Dim Controlw As Control
            Dim erroProv As ErrorProvider = errorprovider_

            For Each Controlw In Form_Controlw.Controls
                   Dim tipo As String = Nothing
                If TypeOf Controlw Is TextBox Then
                    tipo = "TextBox"
                ElseIf TypeOf Controlw Is MinDateMaskedTextBox Then
                    tipo = "MinDateMaskedTextBox"
                ElseIf TypeOf Controlw Is ComboBox Then
                    tipo = "ComboBox"
                End If

                If Controlw.Tag = "*" Then
                    Select Case tipo
                        Case "TextBox"
                            If Controlw.Text.ToUpper.Length > 0 Or Controlw.Enabled = False Then
                                'Controlw.BackColor = System.Drawing.SystemColors.Window
                                erroProv.SetError(Controlw, "")
                            Else
                                erroProv.SetIconPadding(Controlw, -17)
                                erroProv.SetError(Controlw, "Campo obligatorio")
                                'Controlw.BackColor = Color.Bisque
                                salida = False
                            End If
                        Case "MinDateMaskedTextBox"
                            If Controlw.Text.ToUpper.Length = 10 Then
                                'Controlw.BackColor = System.Drawing.SystemColors.Window
                                erroProv.SetError(Controlw, "")
                            Else
                                erroProv.SetIconPadding(Controlw, -17)
                                erroProv.SetError(Controlw, "Campo obligatorio")
                                'Controlw.BackColor = Color.Bisque
                                salida = False
                            End If
                        Case "ComboBox"
                            If CType(Controlw, ComboBox).SelectedValue <> Nothing Or Controlw.Enabled = False Then
                                erroProv.SetError(Controlw, "")
                            Else
                                erroProv.SetIconPadding(Controlw, -34)
                                erroProv.SetError(Controlw, "Campo obligatorio")
                                salida = False
                            End If
                        Case Else
                    End Select
                End If



                'RECURSIVIDAD SI ES CONTENEDOR
                If Controlw.HasChildren = True Then
                    camposObligatoriosCajas(Controlw, erroProv)
                         If Controlw.Tag = "*" Then
                        Select Case tipo
                            Case "TextBox"
                                If Controlw.Text.ToUpper.Length > 0 Or Controlw.Enabled = False Then
                                    'Controlw.BackColor = System.Drawing.SystemColors.Window
                                    erroProv.SetError(Controlw, "")

                                Else
                                    erroProv.SetIconPadding(Controlw, -17)
                                    erroProv.SetError(Controlw, "Campo obligatorio")
                                    'Controlw.BackColor = Color.Bisque
                                    salida = False
                                End If
                            Case "MinDateMaskedTextBox"
                                If Controlw.Text.ToUpper.Length = 10 Then
                                    'Controlw.BackColor = System.Drawing.SystemColors.Window
                                    erroProv.SetError(Controlw, "")

                                Else
                                    erroProv.SetIconPadding(Controlw, -17)
                                    erroProv.SetError(Controlw, "Campo obligatorio")
                                    'Controlw.BackColor = Color.Bisque
                                    salida = False
                                End If
                            Case "ComboBox"
                                If CType(Controlw, ComboBox).SelectedValue <> Nothing Or Controlw.Enabled = False Then
                                    erroProv.SetError(Controlw, "")
                                Else
                                    erroProv.SetIconPadding(Controlw, -17)
                                    erroProv.SetError(Controlw, "Campo obligatorio")
                                    salida = False
                                End If
                            Case Else
                        End Select
                    End If
                End If
            Next
            Return salida
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try
    End Function




**********
'en el form donde esten tus cajas de texto
1) en propiedades> Tag .... de tus textbox y combobox  pones * (el signo asterisco o cualquier otra cosa pero tienes q cambiar también en la función anterior)
2) arrastas un errorProvider a tu form
3)pones esto en la parte que digas guardar, finalizar o comprobar (bueno tu entiendes) (la clase donde tendo la función anterior se llama utilitarios.vb)
 If Utilitarios.camposObligatoriosCajas(Me, Me.ErrorProvider) = False Then
            MessageBox.Show("Revise los campos obligatorios", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  End If


y listo

espero te sirva

saludos


PD: si tienes algun problema me avisas por q trate de ponerte solo el codigo q tú necesitas ya q en mi aplicación tengo algunas cosas q de pronto te confunden y no se si me jale al editar el código.

piyey

  • Miembro MUY activo
  • ***
  • Mensajes: 101
  • Nacionalidad: ni
    • Ver Perfil
    • Piyeycorp® - La imaginación es el límite
Re: validar
« Respuesta #5 en: Sábado 5 de Julio de 2008, 02:16 »
0
La verdad si vas a verificar todo de un toque, no creo que sea necesario hacerlo en manejadores de todos los textbox y/o combobox, podes hacer una función que haga toda la validación, la cual podes llamar en el evento clic del botón que presionen cuando envíen la información... no se, cmdOk.clic talvez.

Te pongo un código de muestra, mejor dicho, una función, que no la he probado  pero así como está funcionaría a la perfección.

Código: Text
  1. Private Sub ComprobarControles()
  2.         Dim controles As Control, valido As Boolean = True
  3.         For Each controles In Me.Controls
  4.             If TypeOf controles Is TextBox Then
  5.                 If controles.Text.Trim.Length = 0 Then
  6.                     valido = False
  7.                     Exit For
  8.                 End If
  9.             ElseIf TypeOf controles Is TextBox Then
  10.                 If CType(controles, ComboBox).SelectedIndex < 0 Then
  11.                     valido = False
  12.                     Exit For
  13.                 End If
  14.                 '...
  15.                 'Incluir el resto de controles que se quieran verificar
  16.                 '...
  17.             End If
  18.         Next
  19.         If Not valido Then
  20.             MessageBox.Show("El campo " & controles.Name & " no debe ser vacío")
  21.             Exit Sub
  22.         End If
  23.         '...
  24.         'Haz lo que tengas que hacer
  25.         '...
  26.     End Sub
  27.  

Espero te sirva.

Saludos
Si no vives para servir...
no sirves para vivir.


No soy el dueño del mundo...
pero si el hijo del dueño.


Entre la linea que divide la realidad de la ilusión...
se encuentra la imaginación

IlusionLand - Piyey

alexis17

  • Miembro MUY activo
  • ***
  • Mensajes: 378
    • Ver Perfil
    • http://www.codigobasico.net
Re: validar
« Respuesta #6 en: Sábado 5 de Julio de 2008, 20:43 »
0
Buenos dias que tal, encontre una funcion para validar correos

pero no la entiendo muy bien

este pedaso de linea que es lo que hace en especifico

 Return Regex.IsMatch(ls_email, "^([w-]+.)*?[w-]+@[w-]+.([w-]+.)*?[w]+$")

no entendi esto bien

"^([w-]+.)*?[w-]+@[w-]+.([w-]+.)*?[w]+$"

el verifica si hay algo antes del arroba mal despeus lo concatena para seguir verificando o no se bien
Cada dia aprendo algo nuevo

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: validar
« Respuesta #7 en: Domingo 6 de Julio de 2008, 01:35 »
0
Cita de: "alexis17"
Buenos dias que tal, encontre una funcion para validar correos

pero no la entiendo muy bien

este pedaso de linea que es lo que hace en especifico

 Return Regex.IsMatch(ls_email, "^([w-]+.)*?[w-]+@[w-]+.([w-]+.)*?[w]+$")

no entendi esto bien

"^([w-]+.)*?[w-]+@[w-]+.([w-]+.)*?[w]+$"

el verifica si hay algo antes del arroba mal despeus lo concatena para seguir verificando o no se bien
Es una expresión regular
Al final del link hay algunos ejemplos y manuales

Saludos
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.