Visual Basic Foro
Programación => Visual Basic 6 => Mensaje iniciado por: E N T E R en Agosto 27, 2011, 08:38:11 pm
-
Como hacen ustedes para formatear en un textbox al escribir un numero.
Private Sub Text1_Change()
Text1.Text = Format(Text1.Text, "##,###")
Text1.SelStart = Len(Text1.Text)
End Sub
Este método me funciona bien, pero el problema si queres cambiar 2 dígitos ya te vuelve a llevar a la ultima posición. Se que con el MaskedBox se puede pero no quiero usar este control
-
¿como cambiar dos dígitos?
¿donde quieres posicionarte?
-
Por ejemplo si tenes 1.500.000 y queres cambiar asi 1.510.000 al cambiar a 1 pasa el cursor a la ultima posición.
-
Es que has puesto en Change el código
Text1.SelStart = Len(Text1.Text)
debes ponerlo en GotFocus
-
claro, pero si lo pongo en focus solo va a funcionar cuando tiene el foco. lo que quiero es mientras voy escribiendo que ya tenga el punto.
-
Escribí rápido y puse gotfocus cuando quise decir lostfocus.
Ahora, tu quieres mientras escriba...mmmm, nunca necesite algo asi. nose, a ver voy a probar un par de cosas
-
mmm, no pude, pensé que jugando con el enveto KeyDown y KeyUp podría lograrlo pero no se como capturar la posicion donde tuve el cursor dentro de la cadena para volver a ponerla alli.
sorry, ojala alguno de los tigres pueda.
-
aca puedo saber la posicion pero tiene un problema si probas vas a pillar donde es el problema.
posicion = Text1.SelStart
'Text1.Text = Left(Text1.Text, Text1.SelStart) & Right(Text1.Text, (Len(Text1.Text) - (Text1.SelStart + 1)))
Text1.Text = Format(Text1.Text, "##,###")
Text1.SelStart = posicion
-
Aun no lo puedo pulir, a veces se me mueve un lugar. No se si por aqui va la cosa.
Dim pasada As Boolean
Dim posicion As Integer
Private Sub Text1_Change()
If pasada Then
pasada = False
If Len(Text1) > 3 Then
Text1.SelStart = posicion + 1
Else
Text1.SelStart = posicion
End If
posicion = Text1.SelStart
Else
pasada = True
posicion = Text1.SelStart
Text1.Text = Format(Text1.Text, "##,###")
Text1.SelStart = posicion
pasada = False
End If
End Sub
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
posicion = Text1.SelStart
End Sub
-
Lo que se suele hacer Ariel en estos casos es formatear el cçodigo al salir del control o sea en el evento GostFocus y puedes realizar una validacion en el evento Validate.
En el evento Changue creo que no es lo mas correcto hacerlo.
-
si si pero eso es lo mas funcional pero queda mas cómodo al escribir ya ves el resultado. funciona muy bien ivan el código que pasaste lo estoy probando es para adaptar al uctexbox que hiciste le hice unos cambios si quieres puedo postear después acá.
Saludos!!!
-
chevere, pero hay que afinarlo bien, y ponerlo como propiedad para que se puede elegir si se desea o no esa funcionalidad.
-
Enter......creo que esto se parece mucho a lo que pretendes.
Private Sub Text1_Change()
posicion = Text1.SelStart
Text1.Text = Format(Text1.Text, "##,###")
Text1.SelStart = posicion + CuentaLetras(Text1, ".")
End Sub
Public Function CuentaLetras(frase As String, letra As String, Optional sense As Boolean = False)
'Funcion creada por Acalanto
On Local Error Resume Next
If sense Then
CuentaLetras = Len(frase) - Len(Replace(LCase(frase), LCase(letra), ""))
Else
CuentaLetras = Len(frase) - Len(Replace(frase, letra, ""))
End If
End Function