Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

limitar textbox caracteres alfanumericos

Estas en el tema de limitar textbox caracteres alfanumericos en el foro de Visual Basic clásico en Foros del Web. Hola a todos una pregunta como puedo hacer para que un textbox solo acepte numeros, el punto(.) , la coma(,) y el signo negativo(-)...
  #1 (permalink)  
Antiguo 31/05/2011, 10:22
Avatar de psalm23  
Fecha de Ingreso: mayo-2011
Mensajes: 36
Antigüedad: 10 años
Puntos: 1
Pregunta limitar textbox caracteres alfanumericos

Hola a todos una pregunta como puedo hacer para que un textbox solo acepte numeros, el punto(.) , la coma(,) y el signo negativo(-)
  #2 (permalink)  
Antiguo 31/05/2011, 13:43
 
Fecha de Ingreso: noviembre-2006
Mensajes: 227
Antigüedad: 14 años, 5 meses
Puntos: 6
Respuesta: limitar textbox caracteres alfanumericos

Haber si te sirve esto:

Código:
Private Sub TxtSD_KeyPress(KeyAscii As Integer)
Dim sDecimal As String
Dim sCar As String * 1
sCar = Chr(KeyAscii)

    'KeyAscii = SoloNumeros(KeyAscii)
     
    If sCar = "." Or sCar = "," Then
        ' comprueba si se ha pulsado coma o punto y lo convierte al
        ' formato del sistema
        KeyAscii = IIf(sDecimal = ",", 44, 46)
        sCar = Chr(KeyAscii)
        ' si ya se ha puesto un punto decimal, no admite otro
        If (InStr(TxtSD, sCar) > 0) Then
             KeyAscii = 0
             Exit Sub
        End If
    ElseIf InStr("0123456789.," & Chr(8), sCar) = 0 Then
        ' sólo admite números, signo negativo, punto, coma y retroceso
        KeyAscii = 0
        Exit Sub
        ' comprueba que el signo menos esté sólo al principio
        ' Nota: Si no queremos negativos, quitar esta condición
    ElseIf sCar = "-" Then
        'If InStr(2, "-", TxtNumeroSalida) = 0 Then
         If TxtSD.SelStart <> 0 Or InStr(TxtSD.Text, "-") > 0 Then
             KeyAscii = 0
        End If
    End If

End Sub
Solo cambia tus valores por los mios y creo que con esto se soluciona tu pedido.

Saludos
  #3 (permalink)  
Antiguo 31/05/2011, 16:18
Avatar de psalm23  
Fecha de Ingreso: mayo-2011
Mensajes: 36
Antigüedad: 10 años
Puntos: 1
Respuesta: limitar textbox caracteres alfanumericos

orale ya lo revise y al parecer si me sirve es mas me puso a pensaren las restrcciones q no habia considerado para el usuario gracias
  #4 (permalink)  
Antiguo 01/06/2011, 04:07
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 14 años, 9 meses
Puntos: 29
Respuesta: limitar textbox caracteres alfanumericos

Hay otros modos de hacerlo:

Código vb:
Ver original
  1. Private Sub Text1_LostFocus()
  2.   If IsNumeric(Text1.Text) = False Then
  3.     MsgBox "Solo se admiten valores numéricos positivos o negativos, puntos de millar y/o coma decimal."
  4.     Text1.SetFocus
  5.     Text1.SelStart = 1
  6.     Text1.SelLenght = Len(Text1.Text)
  7.   End If
  8. End Sub
Se admiten valores negativos, puntos de millar y una coma decimal.


Si quieres usar comas para millares y puntos para decimales puedes hacer una función propia:

Código vb:
Ver original
  1. Private Sub Text1_LostFocus()
  2.   If EsNumero(Text1.Text) = False Then
  3.     MsgBox "Solo se admiten valores numéricos positivos o negativos, comas de millar y/o punto decimal."
  4.     Text1.SetFocus
  5.     Text1.SelStart = 1
  6.     Text1.SelLenght = Len(Text1.Text)
  7.   End If
  8. End Sub
  9.  
  10. Private Function EsNumero(ByVal Texto As String) As Boolean
  11.   Texto=Replace(Texto,".","@")
  12.   Texto=Replace(Texto,",",".")
  13.   Texto=Replace(Texto,"@",",")
  14.   EsNumero=IsNumeric(Texto)
  15. End Function

Lo he hecho a pelo. Espero que funcione.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #5 (permalink)  
Antiguo 01/06/2011, 09:21
Avatar de psalm23  
Fecha de Ingreso: mayo-2011
Mensajes: 36
Antigüedad: 10 años
Puntos: 1
Respuesta: limitar textbox caracteres alfanumericos

ok gracias los tendre en mente a ver cual se ajusta a mis necesidades
  #6 (permalink)  
Antiguo 08/06/2012, 09:34
 
Fecha de Ingreso: junio-2012
Mensajes: 4
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: limitar textbox caracteres alfanumericos

Buen dia y que pasa si despues de la solucion dada aparece el error:

Declaración de procedimiento no coincide con la descripción del evento o procedimiento que tiene el mismo nombre. y selecciona el paso de TxtSD_KeyPress(KeyAscii As Integer)

A continuacion coloco el programa que estoy tratando que funcione:

Private Sub Duracion_KeyPress(Keyascii As Integer)
Keyascii = KeyControl(Keyascii, True)
End Sub

'Función pasar el foco y permitir solo numeros o
'letras en un TextBox o MaskEdBox
Public Function KeyControl(Keyascii As Integer, Optional SoloNum As Boolean = False)

If SoloNum = True Then 'Solo se permiten numeros
Select Case nKeyascii
Case 8 'Permite borrar con retroceso
Exit Function
Case 13 'Pasa el foco al Sig. control
nKeyascii = 0: SendKeys "{TAB}": Exit Function
Case 48 To 57, 45
'Permite los numeros del 0 al 9 y el Signo de menos (-)
Case Else 'No escribe nada y emite un BEEP
nKeyascii = 0: Beep
End Select
End If
End Function


En otro paso del programa me toco colocar en comillas el change para ver si eso era lo que estab afectando pero me di cuenta que no

'Private Sub Duracion_Click()
'Dim Texto As String
'Dim Tipo As String

' Me.Porcentaje.Enabled = True
'
' If Ref <> "" And Entregable <> "Sin Predecesora ¬(X)" Then
' If Me.Duracion <> "" Then
' Me.Porcentaje.Enabled = False
'
' Select Case Me.Entregable
'
' Case "Final-Comienzo ¬(FC)"
' If Me.Duracion = 0 Then
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FF:", vbTextCompare) + 3, 10)
' Me.FechaInicio = Texto
' Else
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FF:", vbTextCompare) + 3, 10)
' Me.FechaInicio = DateValue(DateValue(Texto) + (Me.Duracion))
' End If
'
' Case "Final-Final ¬(FF)"
' If Me.Duracion = 0 Then
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FF:", vbTextCompare) + 3, 10)
' 'MsgBox "La fecha de inicio debe ser igual o menor a: " & Me.FechaInicio
' Me.FechaFinal = Texto
' Else
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FF:", vbTextCompare) + 3, 10)
' 'MsgBox "La fecha de inicio debe ser igual o menor a: " & Me.FechaInicio
' Me.FechaInicio = DateValue(DateValue(Texto) + (Me.Duracion))
' Me.FechaFinal = Texto
' End If
'
' Case "Comienzo-Final ¬(CF)"
' If Me.Duracion = 0 Then
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FI:", vbTextCompare) + 3, 10)
' Me.FechaFinal = Texto
' Else
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FI:", vbTextCompare) + 3, 10)
' Me.FechaInicio = DateValue(DateValue(Texto) + (Me.Duracion))
' Me.FechaFinal = Texto
' End If
'
' Case "Comienzo-Comienzo ¬(CC)"
' If Me.Duracion = 0 Then
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FI:", vbTextCompare) + 3, 10)
' Me.FechaInicio = Texto
' Else
' Texto = Mid(Me.NodoReferencia, InStr(1, Me.NodoReferencia, "FI:", vbTextCompare) + 3, 10)
' Me.FechaInicio = Texto
' Me.FechaFinal = DateValue(DateValue(Texto) + (Me.Duracion))
' End If
'
' End Select
'
' Else
' Me.Porcentaje.Enabled = True
' Me.Duracion.Enabled = False
'
' End If
' End If
'
'End Sub




Gracias
  #7 (permalink)  
Antiguo 09/06/2012, 02:51
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 14 años, 9 meses
Puntos: 29
Respuesta: limitar textbox caracteres alfanumericos

No se que intentas, pero asi por encima veo muchos errores:

Private Sub Duracion_KeyPress(Keyascii As Integer)

Keyascii = KeyControl(Keyascii, True)
'AQUI ESTAMOS CARGANDO KEYASCII CON UN NUEVO VALOR
'PERO LA FUNCION KeyControl NO DEVUELVE NADA

End Sub

'Función pasar el foco y permitir solo numeros o
'letras en un TextBox o MaskEdBox

' ESTA FUNCION DEBE DEVOLVER UN VALOR
' Public Function KeyControl(Keyascii As Integer, Optional SoloNum As Boolean = False)
Public Function KeyControl(Keyascii As Integer, Optional SoloNum As Boolean = False) AS INTEGER

' SOLO SE ACTUA CUANDO SOLONUM=TRUE
' ¿PARA QUE USAR UN PARAMETRO? SI VAS A PONER FALSE NO EJECUTES LA FUNCION
If SoloNum = True Then 'Solo se permiten numeros
' SI QUIERES PERMITIR LETRAS DEBES AÑADIR UN ELSE Y CREAR OTRO SELECT CASE

' NKEYASCII NO EXISTE
' Select Case nKeyascii
Select Case Keyascii

Case 8 'Permite borrar con retroceso
KeyControl=keyascii

Case 13 'Pasa el foco al Sig. control
'nKeyascii = 0: SendKeys "{TAB}": Exit Function
SendKeys "{TAB}"
KeyControl=0

Case 48 To 57, 45
'Permite los numeros del 0 al 9 y el Signo de menos (-)
KeyControl=keyascii


Case Else 'No escribe nada y emite un BEEP
'nKeyascii = 0: Beep
KeyControl=0:beep

End Select


ELSE

' SI SE ADMITEN NUMEROS Y LETRAS:

SELECT CASE KEYASCII




END SELECT

End If
End Function

Suerte

PD: Activa el Option Explicit para no trabajar con variables inexistentes o mal escritas
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #8 (permalink)  
Antiguo 13/06/2012, 15:47
 
Fecha de Ingreso: marzo-2011
Ubicación: Florida-Uruguay
Mensajes: 74
Antigüedad: 10 años, 1 mes
Puntos: 4
Respuesta: limitar textbox caracteres alfanumericos

Alguien tiene idea de como hacer para que en un texbox solo se ingresen numeros y la coma esté como "flotante"? Explico para que deseo ingresar una temperatura corporal ej 39,70 y que en otro textbox me devuelva un valor según la temperatura ingresada. lo cual ya lo resolvi con If.

Etiquetas: alfanumericos, caracteres, limitar, textbox
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:15.