Programación General > Visual Basic para principiantes

 Admitir solo numeros y un solo punto para operaciones

<< < (2/2)

F_Tanori:
:blink:  :whistling:

Creo que hemos entendido tu explicacion desde el principio...  :rolleyes:
es cuestion de razonar un poco....

banderousky:
estube estudiando un libro de visual basic y llegue
a la siguiente conclusion de como resolver este problema
espero y les sirva a alguien mas, yo lo necesitaba para no ingresar
mas de un punto decimal en las cajas de texto que necesito para hacer
operaciones matematicas, despues me encontre con el problema de cuando
ponia pegar en la caja de texto y podia poner un letas y me cometia errores
por lo que tube qe restringir la itulizacion de pegar o crtl + V
bueno saludos a todos


en el evento keypress de la caja de texto

'Bloqueamos la utilización de pegar o Crtl+V para evitar que se ingresen letras'
'cuando es obligatorio ingresar solamente numeros'
 
 Clipboard.Clear
 Clipboard.SetText ""

'Solo admitimos numeros en la caja de texto y el punto decimal'

If InStr("0123456789." & Chr(8) & Chr(13), Chr(KeyAscii)) = 0 Then
KeyAscii = 0
End If

Dim sCar As String * 1
 sCar = Chr(KeyAscii)

 If sCar = "." Then
 ' comprueba si se ha pulsado el punto'
 KeyAscii = IIf(sDecimal = ",", 44, 46)
 sCar = Chr(KeyAscii)

 ' si ya se ha puesto un punto decimal, no admite otro
 If (InStr(txtC2H2, sCar) > 0) Then
  KeyAscii = 0
  Exit Sub
 End If

 Exit Sub
 End If

If KeyAscii = 13 Then            'Verifica que se pulsa la tecla ENTER'
    SendKeys "{tab}"               'Se pulsa la tecla TAB'
End If



y en el evendo mousedown

'Bloqueamos la utilización de pegar o Crtl+V para evitar que se ingresen letras'
'cuando es obligatorio ingresar solamente numeros'
 
 Clipboard.Clear
 Clipboard.SetText ""

y en el vento load del formulario (yo lo tengo en el evento activate)

'comprueba el formato numérico del sistema
sDecimal = Format(0.1, "#.#")
sDecimal = IIf(InStr(sDecimal, ","), ",", ".")

m0skit0:
Efectivamente, funciona. Pero restringir opciones al usuario porque no conoces el lenguaje es una pésima práctica y muy poco profesional.

Nebire:
Usa el evento validate del textbox. Esto ocurre cuando el textbox pierde el foco, ahí chequeas si tiene más de un punto o letras y por tanto cancelas.... al cancelar, el foco no sale  del textbox.


--- Código: Visual Basic --- Private Sub Text1_Validate(Cancel As Boolean)    Dim n() As Byte    Dim HayPunto As Boolean        If Text1.Text = "" Then        MsgBox "La caja de texto no puede quedar vacía, escriba al menos un 0."        Cancel = True    Else         n = Text1.Text        For k = 0 To UBound(n) Step 2            If n(k) > 47 Then                If n(k) > 58 Then                    MsgBox "No se permiten caracteres, sólo números."                    Cancel = True                    Exit Sub                End If            Else                If n(k) = 46 Then                    If HayPunto = False Then                        HayPunto = True                    Else                        MsgBox "Sólo se permite un punto para el número, como separador decimal."                        Cancel = True                        Exit Sub                    End If                Else                    MsgBox "No se permiten caracteres, sólo números."                    Cancel = True                    Exit Sub                End If            End If        Next    End IfEnd Sub  

Navegación

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa