CLR: .Net / Mono / Boo / Otros CLR > VB .NET
validar
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
[#] Página Siguiente
Ir a la versión completa