CLR: .Net / Mono / Boo / Otros CLR > VB .NET

 validar

(1/2) > >>

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

Mollense:

--- 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
--- Fin de la cita ---
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 ---private void tbxNoNulo_Validating(object sender, CancelEventArgs e)        {            if (((TextBox)sender).Text == "")            {                epManejadorDeErrores.SetError(((TextBox)sender), "El TextBox no puede quedar en blanco");            }        } Está en C# pero te puede servir para darte una idea.
epManejadorDeErrores es un ErrorProvider

Salute

alexis17:
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

Nebire:

--- 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
--- Fin de la cita ---

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 ---if sender.text = "" then  throw new exception("El campo de " & sender.name & "no puede quedar vacío")   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 ---Private Sub ValidarVariosTextos_Validating(ByVal sender As System.Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles Textbox1.Validating, Handles Textbox2.Validating, Handles Textbox3.Validating  ' el código anterior de verificaciónEnd Sub 

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

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa