Visual Basic Foro

Programación => Visual Basic 6 => Mensaje iniciado por: E N T E R en Agosto 27, 2011, 08:38:11 pm

Título: Metodo Millar en TextBox
Publicado 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
Título: Re:Metodo Millar en TextBox
Publicado por: YAcosta en Agosto 27, 2011, 09:01:34 pm
¿como cambiar dos dígitos?
¿donde quieres posicionarte?

Título: Re:Metodo Millar en TextBox
Publicado por: E N T E R en Agosto 27, 2011, 09:18:41 pm
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.
Título: Re:Metodo Millar en TextBox
Publicado por: YAcosta en Agosto 27, 2011, 09:23:28 pm
Es que has puesto en Change el código

Text1.SelStart = Len(Text1.Text)

debes ponerlo en GotFocus
Título: Re:Metodo Millar en TextBox
Publicado por: E N T E R en Agosto 27, 2011, 09:34:38 pm
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.
Título: Re:Metodo Millar en TextBox
Publicado por: YAcosta en Agosto 27, 2011, 09:45:58 pm
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
Título: Re:Metodo Millar en TextBox
Publicado por: YAcosta en Agosto 27, 2011, 10:03:47 pm
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.
Título: Re:Metodo Millar en TextBox
Publicado por: E N T E R en Agosto 27, 2011, 10:06:20 pm
aca puedo saber la posicion pero tiene un problema si probas vas a pillar donde es el problema.


Código: [Seleccionar]
        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
Título: Re:Metodo Millar en TextBox
Publicado por: YAcosta en Agosto 27, 2011, 11:03:57 pm
Aun no lo puedo pulir, a veces se me mueve un lugar. No se si por aqui va la cosa.
Código: [Seleccionar]
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

Título: Re:Metodo Millar en TextBox
Publicado por: Bazooka en Agosto 28, 2011, 01:07:00 pm
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.
Título: Re:Metodo Millar en TextBox
Publicado por: E N T E R en Agosto 28, 2011, 01:39:03 pm
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!!!
Título: Re:Metodo Millar en TextBox
Publicado por: YAcosta en Agosto 28, 2011, 03:40:16 pm
chevere, pero hay que afinarlo bien, y ponerlo como propiedad para que se puede elegir si se desea o no esa funcionalidad.
Título: Re:Metodo Millar en TextBox
Publicado por: eligioalmuedo en Agosto 29, 2011, 07:30:22 am
Enter......creo que esto se parece mucho a lo que pretendes.

Código: [Seleccionar]
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