https://foro.gambas-es.org/viewtopic.php?f=1&t=2974
-----------------------------------
datobinario
Domingo, 10 Marzo 2013, 17:16

Control ValueBox En Gambas3 [Solucionado]
-----------------------------------
Saludos amigos, explico el caso:
como ya saben algunos, estoy migrando mis aplicaciones de Gambas2 a Gambas3, en el camino, me he conseguido con ciertos inconvenientes/diferencias, he notado que el control ValueBox es el mas problemático.
enumero algunas de las cosas que he notado:

1.- El Metodo Clear no esta disponible, no se porque.
 esto me ha originado infinitos problemas, puesto que lo usaba mucho.
2.- El Evento Change no esta disponible.
 Casi imposible trabajar sin este evento.
3.- Cuando el control está en modo DATE, los problemas son mayores, súmenle los dos anteriores y agréguenle, por ejemplo, que la inserción de las fechas es mas limitante que en gambas2 ¿limitantes por que? por ejemplo, yo antes podía insertar una fecha así: dia & "/" & mes & "/" anio, ahora no puedo, me dice que estoy insertando un String y espera una fecha. Esto debido a que solo admite para la inserción el formato MM/DD/YYY, aunque lo muestra de forma correcta de acuerdo a la configuración del sistema, en mi caso DD/MM/YYY, esto me causo unas cuantas rabietas al principio.


-----------------------------------
shordi
Domingo, 10 Marzo 2013, 18:17

Re: Control ValueBox En Gambas3
-----------------------------------
[quote]1.- El Metodo Clear no esta disponible, no se porque.[/quote]
Ese método no ha estado nunca disponible para un valuebox ni en gambas2 ni en gambas3

[quote]2.- El Evento Change no esta disponible.
Casi imposible trabajar sin este evento.[/quote]

Bueno... yo no le he usado nunca y llevo cinco años programando en Gambas.

Según el control, utilizo Activate, keyrelease, lostfocus, etc.

Dinos qué quieres hacer con la fecha y verás como hay otras maneras de hacerlo.

[quote] Cuando el control está en modo DATE, los problemas son mayores, súmenle los dos anteriores y agréguenle, por ejemplo, que la inserción de las fechas es mas limitante que en gambas2 ¿limitantes por que? por ejemplo, yo antes podía insertar una fecha así: dia & "/" & mes & "/" anio, ahora no puedo, me dice que estoy insertando un String y espera una fecha. Esto debido a que solo admite para la inserción el formato MM/DD/YYY, aunque lo muestra de forma correcta de acuerdo a la configuración del sistema, en mi caso DD/MM/YYY, esto me causo unas cuantas rabietas al principio.[/quote]
Como creo que ya te ha dicho jguardon, no es correcto manipular los datos en base a su visualización en pantall. Hay que utilizarlos en base a su tipo de dato. Si trabajas con fechas, utiliza fechas. La representación en pantalla déjasela al control. Es en realidad más sencillo.
¿Que te pide una fecha? utiliza la función date(anio, mes,dia) y ya la tienes...

Suerte.


-----------------------------------
datobinario
Domingo, 10 Marzo 2013, 18:40

Re: Control ValueBox En Gambas3
-----------------------------------
[quote user="shordi" post="16734"]
Ese método no ha estado nunca disponible para un valuebox ni en gambas2 ni en gambas3
[/quote]

shordi, en gambas2 estaba disponible, la aplicacion que estoy migrando lo tenia, y mucho, por eso he tenido tantos problemas, por los momentos, lo he resuelto así: ValueBox.Clear ==> ValueBox.Value=""

Con la fecha ya he resuleto, pero no como me sugeriste, voy a hacer lo que dices, es una solucion mas inteligente a la que yo me usé.
Y el Evento Change, pues ya veré que resuelvo, pero es uno de los eventos que mas utilizo.


-----------------------------------
jguardon
Domingo, 10 Marzo 2013, 18:44

Re: Control ValueBox En Gambas3
-----------------------------------
[quote user="shordi" post="16734"]
Ese método no ha estado nunca disponible para un valuebox ni en gambas2 ni en gambas3
[/quote]

Oops, shordi siento decirte que en gambas2 sí estaba disponible [1]. Pero claro, es que entonces el valuebox, provenía del control TextBox y ahora no.

También el evento change estaba antes disponible, pero no ahora. Yo también lo echo de menos, así que se lo he preguntado a Benoit, a ver qué dice...

Respecto al método clear, ahora no disponible, hay una forma de limpiar el contenido, que es asignando el valor 0. Cuando el nuevo valuebox tiene un valor nulo, éste no muestra su contenido.

En fin, no me gusta mucho la implementación, sobre todo cuando está en modo Time, y saca esa lista de horas tan fea. Ajo y agua, como dicen en mi pueblo.

Saludos


[1].- http://gambasdoc.org/help/comp/gb.form/valuebox?es&v2


-----------------------------------
jousseph
Domingo, 10 Marzo 2013, 19:01

Re: Control ValueBox En Gambas3
-----------------------------------
[quote]1.- El Metodo Clear no esta disponible, no se porque.
esto me ha originado infinitos problemas, puesto que lo usaba mucho.
2.- El Evento Change no esta disponible.
Casi imposible trabajar sin este evento.[/quote]

Datobinario, estas equivocado yo llevo desde hace tiempo usando el  evento change para las textbox evitando letras y numeros, tambien el clear para borrar registros tanto de textbox como de tableview nose si es que tienes un gambas 3 malo estas haciendo las cosas mal. :mrorange:


-----------------------------------
jguardon
Domingo, 10 Marzo 2013, 19:20

Re: Control ValueBox En Gambas3
-----------------------------------
jousseph

Es la segunda vez que tengo que decirte que leas antes de postear. No estamos hablando de textbox, sino de valuebox.

¿Tanto cuesta leer y comprender lo que se lee antes de quedar en ridículo?

Por favor, LEE

Saludos


-----------------------------------
jguardon
Domingo, 10 Marzo 2013, 19:35

Re: Control ValueBox En Gambas3
-----------------------------------
Buenas noticias

He consultado a Benoit por qué el ValueBox no trae el evento change y efectivamente le ha surgido la duda a él también. Probablemente lo implemente en próximas versiones, conociéndole puede que en la próxima revisión lo tenga ya.

Mientras, nos ha dado una solución transitoria para salir del paso. Os explico:

Sólo después de haber asignado el tipo de control (numero, fecha, hora, etc) podemos crear un observador en el primer hijo interno del control, de manera que podamos cazar su evento change:

[code linenumbers=false syntax=gambas]hObs = New Observer(MyValueBox.Children[0]) As "MyValueBox"

Public Sub MyValueBox_Change()

' codigo del evento
End[/code]

Y ya está. Espero que pronto lo veamos implementado nativamente. Gracias a datobinario por ponerlo de manifiesto.

Saludos


-----------------------------------
shordi
Domingo, 10 Marzo 2013, 21:13

Re: Control ValueBox En Gambas3
-----------------------------------
Cierto, en gambas2 está. El alemán del pijo como que trae loco.


-----------------------------------
datobinario
Lunes, 11 Marzo 2013, 03:00

Re: Control ValueBox En Gambas3
-----------------------------------
[code linenumbers=false syntax=gambas]hObs = New Observer(MyValueBox.Children[0]) As "MyValueBox"

Public Sub MyValueBox_Change()

' codigo del evento
End[/code]

Como el ejemplo de Guardon utiliza MyValueBox 2 veces, estoy un pelo confundido, a ver si pueden ayudarme un poco mas, este era mi código en gambas2:

[code linenumbers=false syntax=gambas]Public Sub libras_Change()
If libras.Value <> "" Then
  peso.Text = libras.Value * 0.45
Else
  peso.Text = 0
Endif
End[/code]

'libras' es un control ValueBox, y 'peso' es un control TexBox.


-----------------------------------
shordi
Lunes, 11 Marzo 2013, 09:46

Re: Control ValueBox En Gambas3
-----------------------------------
libras es un valuebox numérico. su propiedad .value es un númro. Luego

[code linenumbers=false syntax=gambas]If libras.Value <> "" Then[/code]
No tiene sentido, por cuneot lo comparas con una cadena "".

Lo mismo más abajo:
Peso.text es una cadena. Libras.Value es un número.No es correcto mezclar valores de distinto tipo.
¿Por qué te funcionaba (si es que lo hacía)? Porque el compilador lleva sus propias rutinas de conversión que flexibilizan el código, pero eso:

 a) Sigue sin ser correcto, aunque de momento pueda funcionar y
 b) En algún momento en los que el lenguaje evolucione hacia maneras más estrictas (y basta con que te actualicen la manera en la que manejan los datos los eventos de un control ) para que te deje de funcionar.

A parte de eso, la lógica que sigues es correcta. Tan sólo un consejo: Indenta tu código. El Empezar las líneas en la misma columna hace el código ilegible. 
En lugar de 

[code linenumbers=false syntax=gambas]Public Sub libras_Change()
If libras.Value <> "" Then
peso.Text = libras.Value * 0.45
Else
peso.Text = 0
Endif
End
[/code]

[code linenumbers=false syntax=gambas]Public Sub libras_Change()
    If libras.Value <> "" Then
        peso.Text = libras.Value * 0.45
    Else
        peso.Text = 0
    Endif
End
[/code]

Saludos.


-----------------------------------
datobinario
Lunes, 11 Marzo 2013, 13:53

Re: Control ValueBox En Gambas3
-----------------------------------
1.- Lo comparo con una cadena porque yo usaba el método Clear, el Método Clear no asigna "0" asigna vació "", es una validación para evitar u error que me aborte el programa.
2.- no hay ningún problema en enviarlo a un TextBox, la cosa es que tengo un dato en sistema numérico (Libras, Pulgadas, etc) y quiero enviarlo a la BD en la forma (mts, Kilos e.t.c.), cuando envió los datos a MySql envió una cadena, en tal sentido, es mas cómodo usar un Cuadro de texto, ahora no recuerdo, pero creo que me dio problemas para concatenar la consulta Sql usando el valueBox y por eso lo cambie a TextBox, esa aplicación ya tenia 2 años en funcionamiento y hay cosas que no recuerdo porque las hice.
3.- El programa esta identado, con los espacios predeterminados de gambas2, que son pequeños, igual no se porque al hacer copy-paste no se reflejó la identacion.

4.- Intenté aplicar el Observador que recomendó Guardon, pero no pude, por eso publique el código a ver si logran darme una mano con eso.


-----------------------------------
jguardon
Lunes, 11 Marzo 2013, 20:33

Re: Control ValueBox En Gambas3
-----------------------------------
[quote user="datobinario" post="16742"]
Como el ejemplo de Guardon utiliza MyValueBox 2 veces, estoy un pelo confundido, a ver si pueden ayudarme un poco mas, este era mi código en gambas2:

'libras' es un control ValueBox, y 'peso' es un control TexBox.[/quote]

Vale, es muy sencillo:

[code linenumbers=false syntax=gambas]
' al principio de la clase

Private hObs as Observer

' En el Form_Open o en el Form_new():

Public Sub Form_Open()
    ' ... 
    hObs = New Observer(libras.Children[0]) As "libras"

End


Public Sub libras_Change()

    If libras.Value <> 0 Then
        peso.Text = libras.Value * 0.45
    Else
        peso.Text = 0
    Endif

End[/code]


Como ves, usamos el nombre del valuebox que tu has definido. Lo observamos (observamos los eventos) que produce uno de sus controles internos, accedemos a él con .Children[0], que supuestamente es un textbox que lleva dentro. Pero eso ahora no nos importa, lo que importa es que estamos interceptando los eventos que produce y designamos un "manejador de eventos" mediante la sintaxis [font=Courier New][b]As "nombredelcontrol entre comillas"[/b][/font]. Ese nombre del control puede ser cualquier cosa, pero en este caso conviene usar el mismo nombre del control verdadero "libras".

"libras" entonces ya es un manejador de eventos, y como tal podemos usar eventos en la forma:

[code linenumbers=false syntax=gambas]Public Sub control_evento()[/code]


De manera que para este caso concreto hacemos:

[code linenumbers=false syntax=gambas]Public Sub libras_Change()

End[/code]

Saludos


-----------------------------------
datobinario
Lunes, 11 Marzo 2013, 22:45

Re: Control ValueBox En Gambas3
-----------------------------------
Fino, gracias, hoy lo pruebo y les cuento.


-----------------------------------
datobinario
Martes, 12 Marzo 2013, 03:53

Re: Control ValueBox En Gambas3
-----------------------------------
La solución fue Mágica, gracias otra vez.


