In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

Parámetros entre diálogos mediante DATAs

Foro público de Xailer en español
Responder
Jaime Irurzun
Mensajes: 67
Registrado: Mar Nov 02, 2004 6:23 pm

Parámetros entre diálogos mediante DATAs

Mensaje por Jaime Irurzun »

Hola,
A ver si alguien me puede decir por qué me ocurre lo siguiente:
Tengo un diálogo con un Tree en la clase TMainForm. Además, uso una
clase TEditar, que muestra un formulario con un GET en el que se puede
editar el nombre de un item del Tree. La idea es que mediante un botón
del formulario principal se muestre el diálogo TEditar con el nombre del
item seleccionado como ::Value del GET, para que así­ el usuario lo
modifique y tras pulsar "Aceptar" el valor se cambie en el Tree.
En el evento OnClick del botón "Editar" hago esto:
METHOD BtnEditarClick( oSender ) CLASS TMainForm
WITH OBJECT TEditar():New( Self )
:xItem := ::oTree:GetSelectedItem():cText
:ShowModal()
END
RETURN Nil
Y en el evento OnInitialize del form TEditar hago esto otro:
METHOD FormInitialize( oSender ) CLASS TEditar
::oEdtItem:Value := ::xItem
RETURN Nil
He declarado xItem como una DATA de la clase TEditar. Sin embargo, el
formulario se carga con el valor NIL en el GET. ¿Por qué puede ser?
Sé que esto lo puedo hacer sin la DATA, accediendo desde TEditar al
TMainForm así­:
Application:oMainForm:oTree:GetSelectedItem():cText
Pero me gustarí­a probarlo con la DATA y no entiendo por qué no funciona.
Gracias!
--
Un saludo,
Jaime Irurzun.
www.codigoescrito.com
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Parámetros entre diálogos mediante DATAs

Mensaje por jfgimenez »

Jaime,
el problema es que el evento OnInitialize del formulario TEditar se ejecuta
antes de terminar el método New(). Por eso xItem todavía no tiene ningún
valor; se está asignando después.
Lo que quieres hacer, yo lo haría así:
METHOD BtnEditarClick( oSender ) CLASS TMainForm
WITH OBJECT TEditar():New( Self )
:oEdtItem:Value := ::oTree:GetSelectedItem():cText
:ShowModal()
END
RETURN Nil
Y no te haría falta escribir el evento OnInitialize de TEditar.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
Jaime Irurzun
Mensajes: 67
Registrado: Mar Nov 02, 2004 6:23 pm

Parámetros entre diálogos mediante DATAs

Mensaje por Jaime Irurzun »

José,
Estupendo. Yo pensaba que no podrí­a hacer eso porque el :oEdtItem no
estarí­a creado antes de que yo hiciera el :ShowModal(). Así­ hasta me
ahorro la DATA... genial, esto abre cantidad de posibilidades. Muchas
gracias.
P.D: En cualquier caso, por estilo, ¿qué forma serí­a más elegante? ¿La
que tú propones o acceder desde TEditar al Application:oMainForm? Creo
que la que tú propones... pero me gustarí­a asegurarme.
--
Un saludo,
Jaime Irurzun.
www.codigoescrito.com
José F. Giménez escribió:
> Jaime,
>
> el problema es que el evento OnInitialize del formulario TEditar se ejecuta
> antes de terminar el método New(). Por eso xItem todaví­a no tiene ningún
> valor; se está asignando después.
>
> Lo que quieres hacer, yo lo harí­a así­:
>
> METHOD BtnEditarClick( oSender ) CLASS TMainForm
>
> WITH OBJECT TEditar():New( Self )
> :oEdtItem:Value := ::oTree:GetSelectedItem():cText
> :ShowModal()
> END
>
> RETURN Nil
>
> Y no te harí­a falta escribir el evento OnInitialize de TEditar.
>
Avatar de Usuario
jfgimenez
Site Admin
Mensajes: 5718
Registrado: Lun Abr 06, 2015 8:48 pm
Contactar:

Parámetros entre diálogos mediante DATAs

Mensaje por jfgimenez »

Jaime,
> P.D: En cualquier caso, por estilo, ¿qué forma sería más elegante? ¿La que
> tú propones o acceder desde TEditar al Application:oMainForm? Creo que la
> que tú propones... pero me gustaría asegurarme.
En mi opinión, no sólo es más elegante, sino que también resulta más legible
el código de la forma que te he propuesto. De todos modos, creo que es
cuestión del estilo particular de cada uno.
--
Un saludo,
José F. Giménez
José F. Giménez
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
jlalin
Mensajes: 926
Registrado: Sab Dic 25, 2010 11:10 pm

Parámetros entre diálogos mediante DATAs

Mensaje por jlalin »

Jaime,
si no necesitas mostrar un diálogo o quieras ahorrarte el hacerlo
también puedes hacerlo de este modo:
* Establece la propiedad lEditLabels a .T.
* Llama a ::oTree:EditLabel( ::oTree:GetSelectedItem():hItem )
* Si quieres redondearlo, dale al usuario la posibilidad de hacerlo con
una tecla estándar como F2.
Saludos,
José Lalí­n
Jaime Irurzun
Mensajes: 67
Registrado: Mar Nov 02, 2004 6:23 pm

Parámetros entre diálogos mediante DATAs

Mensaje por Jaime Irurzun »

José,
Así­ mucho mejor. De hecho es lo que quise hacer desde un principio pero
no encontraba la forma. Muchas gracias!
--
Un saludo,
Jaime Irurzun.
www.codigoescrito.com
José Lalí­n escribió:
>
> Jaime,
>
> si no necesitas mostrar un diálogo o quieras ahorrarte el hacerlo
> también puedes hacerlo de este modo:
>
> * Establece la propiedad lEditLabels a .T.
> * Llama a ::oTree:EditLabel( ::oTree:GetSelectedItem():hItem )
> * Si quieres redondearlo, dale al usuario la posibilidad de hacerlo con
> una tecla estándar como F2.
>
> Saludos,
> José Lalí­n
Responder