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
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.
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
-
- Mensajes: 67
- Registrado: Mar Nov 02, 2004 6:23 pm
Parámetros entre diálogos mediante DATAs
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
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
-
- Mensajes: 67
- Registrado: Mar Nov 02, 2004 6:23 pm
Parámetros entre diálogos mediante DATAs
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.
>
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.
>
Parámetros entre diálogos mediante DATAs
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
> 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
Parámetros entre diálogos mediante DATAs
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
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
-
- Mensajes: 67
- Registrado: Mar Nov 02, 2004 6:23 pm
Parámetros entre diálogos mediante DATAs
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
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