SoloCodigo
Programación General => Visual Basic 6.0 e inferiores => Mensaje iniciado por: juanjo en Jueves 22 de Enero de 2004, 06:00
-
necesito validar un masked box, tengo en 1 formulario 1 maskedbox, 3 text + 1 boton...
estoy intentando validar el boton de la siguiente manera:
Private Sub Text1_Change()
If Len(mskRut) < 12 Or Text1 = "" Or Text2 = "" Then
cmdGuardar.Enabled = False
Else
cmdGuardar.Enabled = True
End If
End Sub
Private Sub Text2_Change()
If Len(mskRut) < 12 Or Text1 = "" Or Text2 = "" Then
cmdGuardar.Enabled = False
Else
cmdGuardar.Enabled = True
End If
End Sub
Private Sub mskRut_Change()
If Len(mskRut.SelText) < 12 Or Text1 = "" Or Text2 = "" Then
cmdGuardar.Enabled = False
Else
cmdGuardar.Enabled = True
End If
End Sub
Private Sub Form_Load()
mskRut.Mask = "##.###.###-&"
cmdGuardar.Enabled = False
End Sub
LA IDEA ES KE SOLO SE ACTIVE (ENABLED=TRUE) EL BOTON CUANDO EL INGRESO DE TODOS LOS TEXT MAS EL MASKEDBOX SEA CORRECTO, PERO NO HE PODIDO HACERLO, HABER SI PUEDEN ECHARME UNA MANITO, GRACIAS...
-
Supongamos que el masked es el primer objeto que recibe el foco cuando se activa el form, entonces:
- Deja la propiedad enabled=true del masked en tiempo de diseño
- Deja la propiedad enabled=false de los text en tiempo de diseño
Coloca lo siguiente:
Private Sub Masked1_KeyPress(Keyascii as Integer)
if keyascii=13 then 'Verifico que se haya presionado el ENTER
If Len(masked1) < 12 then 'Verifico si el largo del masked=12
text1.enabled=true 'Habilito el text1
text1.setfocus 'traspaso el foco
Else
masked1.setfocus
End If
endif
end sub
Private Sub Text1_KeyPress(Keyascii as Integer)
if keyascii=13 then
if len(text1.text) >0 then
text2.enabled=true
text2.setfocus
else
text1.setfocus
endif
End If
end sub
Private Sub Text2_KeyPress(Keyascii as Integer)
if keyascii=13 then
if len(text2.text) >0 then
cmdGuardar.enabled=true
cmdGuardar.setfocus
else
text2.setfocus
endif
End If
end sub
Espero te sirva
-
NOP JOSE, NO FUNCIONA, AL PARECER LA FUNCION LEN NO SABE SI TOMAR EL LARGO DE ÑA PROPIEDAD MASK, O DE LA PROPIEDAD TEXT DEL MASKEDBOX, PERO LA IDEA ES ESA, PERO EN VEZ DE HABILITAR LOS TEXT, QUIERO HABILITAR UN BOTON, PERO LA IDEA ES LA MISMA ASI QUE NO HAY PROBLEMA, GRACIAS...
HABER SI TIENES OTRA SOLUCION POR AHI, GRACIAS...
-
La solucion que te di funciona.
La idea era simple, lo que tenias que hacer era unos ajustes necesarios para que operara:
Ahi te va el codigo completo:
Private Sub Form_Load()
MaskEdBox1.Mask = "##.###.###-&"
cmdGuardar.Enabled = False
Text1.Text = ""
Text2.Text = ""
End Sub
Private Sub MaskEdBox1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Verifica
Text1.SetFocus
End If
End Sub
Public Sub Verifica()
sRut = Trim(MaskEdBox1.Text)
If Es_Rut(sRut, 0) = True Then
If Len(Text1.Text) > 0 Then
If Len(Text2.Text) > 0 Then
cmdGuardar.Enabled = True
Else
cmdGuardar.Enabled = False
End If
Else
cmdGuardar.Enabled = False
End If
Else
cmdGuardar.Enabled = False
End If
End Sub
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Verifica
Text2.SetFocus
End If
End Sub
Private Sub Text2_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Call Verifica
End If
End Sub
Public Function Es_Rut(ByVal X As String, ByVal Y As Integer) As Boolean
' Funcion que recibe el string con el Rut y lo analiza
' Y=0 no entrega mensaje
' Y=1 mensaje de RUT
' Y=2 mensaje de ficha
' Si es rut entrega Es_Rut=True
' Si no es rut entrega Es_Rut=False
X = Trim(X)
xLargo = Len(X)
xposicion = InStr(X, "-")
If xposicion <> 0 Then
xNumero = Format(Mid$(X, 1, xposicion - 1), "00000000")
xdv = Mid$(X, xposicion + 1, xLargo - xposicion + 1)
If IsNumeric(xNumero) Then
If Len(xdv) = 1 Then
If IsNumeric(dv) Then
xBandera = 1
Else
If UCase(dv) = "K" Then
xBandera = 1
Else
xBandera = 0
End If
End If
Else
xBandera = 0
End If
Else
xBandera = 0
End If
If xBandera = 1 Then
'posiciones : 8 7 6 5 4 3 2 1
'multiplicar por: 3 2 7 6 5 4 3 2
xpos8 = CInt(Mid(xNumero, 1, 1))
xpos7 = CInt(Mid(xNumero, 2, 1))
xpos6 = CInt(Mid(xNumero, 3, 1))
xpos5 = CInt(Mid(xNumero, 4, 1))
xpos4 = CInt(Mid(xNumero, 5, 1))
xpos3 = CInt(Mid(xNumero, 6, 1))
xpos2 = CInt(Mid(xNumero, 7, 1))
xpos1 = CInt(Mid(xNumero, 8, 1))
xSuma = xpos8 * 3 + xpos7 * 2 + xpos6 * 7 + xpos5 * 6 + xpos4 * 5 + xpos3 * 4 + xpos2 * 3 + xpos1 * 2
xentero = Int(xSuma / 11)
xValor = xSuma - xentero * 11
xresto = 11 - xValor
Select Case xresto
Case 0 To 9: dv = CStr(xresto)
Case 10: dv = "K"
Case 11: dv = "0"
End Select
If UCase(xdv) = dv Then
Es_Rut = True
Else
Es_Rut = False
If Y <> 0 Then
If Y = 1 Then
Msg = "El rut correcto debe ser " & Format(CDbl(xNumero), "#,##0") & "-" & dv
Else
Msg = "La ficha correcta debe ser " & Format(CDbl(xNumero), "#,##0") & "-" & dv
End If
MsgBox Msg, vbInformation, "Advertencia"
End If
End If
Else
Es_Rut = False
End If
Else
Es_Rut = False
End If
End Function