Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Convertir de pesetas a euros
#1

Buenas!.

Código:

GAMBAS
  1. Const PTATOEURO As Float = 166.386
  2.  
  3. Public Sub Form_Open()
  4.  
  5.   Me.Title = "Conversor de ptas a euros"
  6.  
  7.  
  8. Public Sub vlbPesetas_KeyPress()
  9.  
  10.   If Key.code = Key.enter Or Key.code = Key.Return Then
  11.     'Si se ha pulsado la tecla enter o la tecla return
  12.     If vlbPesetas.Value > 0 Then
  13.       'Si el valor es mayor que cero realizar la conversión
  14.       lblEuros.Text = Str(Round(vlbPesetas.Value / PTATOEURO, -2)) & " €"
  15.     Else
  16.       'En caso contrario poner el valor a cero
  17.       vlbPesetas.Value = 0
  18.     Endif
  19.  



Os muestro el problema. Cuando escribo una cantidad en el valuebox por primera vez.

[Imagen: LD20xZ3.png]

Pero si quiero realizar otra operación e intento escribir en el valuebox...
Por ejemplo cuanto son 60 pesetas en euros, ocurre esto con el código de arriba.

[Imagen: KMJWl4A.png]

Entonces tuve que usar los dos eventos. Keypress y KeyRelease.

GAMBAS
  1. Const PTATOEURO As Float = 166.386
  2.  
  3. Private conversion As Boolean
  4.  
  5. Public Sub Form_Open()
  6.  
  7.   Me.Title = "Conversor de ptas a euros"
  8.  
  9.  
  10. Public Sub vlbPesetas_KeyRelease()
  11.  
  12.   If Key.code = Key.enter Or Key.code = Key.Return Then
  13.     'Si se ha levantado la tecla enter o la tecla return
  14.     If vlbPesetas.Value > 0 Then
  15.       'Si el valor es mayor que cero realizar la conversión
  16.       lblEuros.Text = Str(Round(vlbPesetas.Value / PTATOEURO, -2)) & " €"
  17.       'Se ha realizado la conversión
  18.       conversion = True
  19.     Else
  20.       vlbPesetas.Value = 0
  21.     Endif
  22.  
  23.  
  24. Public Sub vlbPesetas_KeyPress()
  25.  
  26.   'Al volver a pulsar una tecla
  27.   'Se comprueba si se ha realizado la conversión
  28.   If conversion Then
  29.     'Ponemos el valor del valuebox a cero
  30.     vlbPesetas.Value = 0
  31.     'La conversión aun no se ha realizado
  32.     conversion = False
  33.  



De este problema salió el ejemplo del TextBox. En parte es casi el mismo problema.
En el caso del valuebox no me interesaba que se borrase la cantidad en euros al pulsar la tecla Return o Enter,
quería que se mostrase y quedase ahí para luego al volver a escribir una nueva cantidad, pulsando una tecla
se borrase la cantidad anterior y pudiera escribir la nueva. Y así continuamente.

¿ Es posible hacerlo de otra forma ?. ¿ Es la forma correcta usando los dos eventos ?.

Añadí hasta un Timer, para que pasado un tiempo se borrase la cantidad. Pero no fue necesario.

En parte lo curioso del código es que parece invertido. Keypress no comprueba la tecla pulsada.
Y en este caso es después de haberla pulsado, con KeyRelease.


Saludos


Archivos adjuntos
.gz ConvertirPesetasAEurosGrafico-0.0.1.tar.gz Tamaño: 12.18 KB  Descargas: 1

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!
#2

Yo lo haría así:
GAMBAS
  1. ' Gambas class file
  2.  
  3. Const PTATOEURO As Float = 166.386
  4.  
  5. Private conversion As Boolean
  6.  
  7. Public Sub Form_Open()
  8.  
  9.   Me.Title = "Conversor de ptas a euros"
  10.  
  11.  
  12. Public Sub vlbPesetas_KeyRelease()
  13.  
  14.   If Key.code = Key.enter Or Key.code = Key.Return Then
  15.     'Si se ha levantado la tecla enter o la tecla return
  16.     If vlbPesetas.Value > 0 Then
  17.       'Si el valor es mayor que cero realizar la conversión
  18.       lblEuros.Text = Str(Round(vlbPesetas.Value / PTATOEURO, -2)) & " €"
  19.       'Se ha realizado la conversión
  20.       conversion = True
  21.       vlbPesetas.SelectAll ''seleccionamos todo lo tecleado sin borrarlo. A la siguiente pulsación se eliminará.
  22.     Else
  23.       vlbPesetas.Value = 0
  24.     Endif
  25.  
  26. '
  27. ' Public Sub vlbPesetas_KeyPress()
  28. '
  29. '   'Al volver a pulsar una tecla
  30. '   'Se comprueba si se ha realizado la conversión
  31. '   If conversion Then
  32. '     'Ponemos el valor del valuebox a cero
  33. '     vlbPesetas.Value = 0
  34. '     'La conversión aun no se ha realizado
  35. '     conversion = False
  36. '   Endif
  37. '
  38. ' End



Saludos

No podemos regresar
[-] Los siguientes 1 usuarios dice gracias a Shordi por este post:
  • Shell
    ¡Gracias!
#3

(20-01-2023, 20:38)Shordi escribió:  Yo lo haría así:

Buena opción, eliminas la variable boolean y el evento Keypress. Conocía el método SelectAll, lo que no imaginaba es que iba
a crear esa posibilidad. Lo veía más para selección para copiar, pegar.

Gracias.

"El buen perfume en frasco pequeño se vende"
    ¡Gracias!


Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)