• Jueves 14 de Noviembre de 2024, 23:03

Autor Tema:  Maskedbox  (Leído 4090 veces)

juanjo

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Maskedbox
« en: Jueves 22 de Enero de 2004, 06:00 »
0
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...

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Maskedbox
« Respuesta #1 en: Jueves 22 de Enero de 2004, 22:32 »
0
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

juanjo

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Maskedbox
« Respuesta #2 en: Viernes 23 de Enero de 2004, 00:53 »
0
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...

Jose Arriagada

  • Miembro MUY activo
  • ***
  • Mensajes: 373
    • Ver Perfil
Re: Maskedbox
« Respuesta #3 en: Viernes 23 de Enero de 2004, 14:55 »
0
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