Página 1 de 1
¿Cuando se destruye completamente un formulario?
Publicado: Lun Sep 19, 2005 7:40 pm
por joseluis
Hola
Este código desde un formulario
METHOD OtroForm() FORM tForm1
LOCAL oForm
oForm := tForm1():New( Self )
oForm:Showmodal()
oForm:....
RETURN NIL
Después del oForm:ShowModal() todavía tengo acceso al formulario.
¿Cuando se destruye?
Saludos y gracias,
José Luis Capel
¿Cuando se destruye completamente un formulario?
Publicado: Lun Sep 19, 2005 8:50 pm
por CapelSoft
Ups, un error en el código.
Lo correcto es:
> METHOD OtroForm() FORM tForm1
>
> LOCAL oForm
>
> oForm := tFormOtro():New( Self )
>
> oForm:Showmodal()
>
> oForm:....
>
>
> RETURN NIL
Saludos y disculpad el error.
José Luis Capel
José Luis Capel escribió:
> Hola
>
> Este código desde un formulario
>
> METHOD OtroForm() FORM tForm1
>
> LOCAL oForm
>
> oForm := tForm1():New( Self )
>
> oForm:Showmodal()
>
> oForm:....
>
>
> RETURN NIL
>
> Después del oForm:ShowModal() todavía tengo acceso al formulario.
> ¿Cuando se destruye?
>
> Saludos y gracias,
> José Luis Capel
>
¿Cuando se destruye completamente un formulario?
Publicado: Lun Sep 19, 2005 10:05 pm
por Xevi
José Luis,
Fíjate que estás creando oForm com local, lo cual quiere decir que su ámbito
es sólo para el método en el cual has declarado oForm.
Cuando finalize el método, (RETURN), se destruye la variable y con ello el
valor que en este caso es un Form.
Creo que es así, sinó alguien que me corrija.
Un Saludo,
Xevi.
"José Luis Capel" <
capelsoft@terra.es> escribió en el mensaje
news:[email=
432f086b@ozsrvnegro.ozlan.local...]
432f086b@ozsrvnegro.ozlan.local...[/email]
> Ups, un error en el código.
>
> Lo correcto es:
>
> > METHOD OtroForm() FORM tForm1
> >
> > LOCAL oForm
> >
> > oForm := tFormOtro():New( Self )
> >
> > oForm:Showmodal()
> >
> > oForm:....
> >
> >
> > RETURN NIL
>
> Saludos y disculpad el error.
> José Luis Capel
>
> José Luis Capel escribió:
>> Hola
>>
>> Este código desde un formulario
>>
>> METHOD OtroForm() FORM tForm1
>>
>> LOCAL oForm
>>
>> oForm := tForm1():New( Self )
>>
>> oForm:Showmodal()
>>
>> oForm:....
>>
>>
>> RETURN NIL
>>
>> Después del oForm:ShowModal() todavía tengo acceso al formulario. ¿Cuando
>> se destruye?
>>
>> Saludos y gracias,
>> José Luis Capel
>>
>
¿Cuando se destruye completamente un formulario?
Publicado: Mar Sep 20, 2005 9:25 am
por ignacio
José Luis,
José Luis,
La ventana subyacente de Windows, QUE NO EL OBJETO de Xailer, se destruye
cuando se cierra el formulario, siempre que lHideOnClose no esté a
verdadero.
El objeto de Xailer se destruye automáticamente cuando deja de ser
referenciado y el recolectar de basura de xHarbour lo destruye.
Un saludo,
"José Luis Capel" <
joseluis@iaicom.com> escribió en el mensaje
news:432ef8b4$[email=
1@ozsrvnegro.ozlan.local...]
1@ozsrvnegro.ozlan.local...[/email]
> Hola
>
> Este código desde un formulario
>
> METHOD OtroForm() FORM tForm1
>
> LOCAL oForm
>
> oForm := tForm1():New( Self )
>
> oForm:Showmodal()
>
> oForm:....
>
>
> RETURN NIL
>
> Después del oForm:ShowModal() todavía tengo acceso al formulario. ¿Cuando
> se destruye?
>
> Saludos y gracias,
> José Luis Capel
>
¿Cuando se destruye completamente un formulario?
Publicado: Mar Sep 20, 2005 9:34 am
por joseluis
Xevi!!
Gracias...
Saludos,
José Luis Capel
Xevi escribió:
>
> José Luis,
>
> Fíjate que estás creando oForm com local, lo cual quiere decir que su ámbito
> es sólo para el método en el cual has declarado oForm.
> Cuando finalize el método, (RETURN), se destruye la variable y con ello el
> valor que en este caso es un Form.
>
> Creo que es así, sinó alguien que me corrija.
>
>
> Un Saludo,
> Xevi.
>
>
> "José Luis Capel" <
capelsoft@terra.es> escribió en el mensaje
> news:[email=
432f086b@ozsrvnegro.ozlan.local...]
432f086b@ozsrvnegro.ozlan.local...[/email]
>
>>Ups, un error en el código.
>>
>>Lo correcto es:
>>
>>
>>>METHOD OtroForm() FORM tForm1
>>>
>>> LOCAL oForm
>>>
>>> oForm := tFormOtro():New( Self )
>>>
>>> oForm:Showmodal()
>>>
>>> oForm:....
>>>
>>>
>>>RETURN NIL
>>
>>Saludos y disculpad el error.
>>José Luis Capel
>>
>>José Luis Capel escribió:
>>
>>>Hola
>>>
>>>Este código desde un formulario
>>>
>>>METHOD OtroForm() FORM tForm1
>>>
>>> LOCAL oForm
>>>
>>> oForm := tForm1():New( Self )
>>>
>>> oForm:Showmodal()
>>>
>>> oForm:....
>>>
>>>
>>>RETURN NIL
>>>
>>>Después del oForm:ShowModal() todavía tengo acceso al formulario. ¿Cuando
>>>se destruye?
>>>
>>>Saludos y gracias,
>>>José Luis Capel
>>>
>>
>
>
>
¿Cuando se destruye completamente un formulario?
Publicado: Mar Sep 20, 2005 9:36 am
por joseluis
Ignacio,
>
> La ventana subyacente de Windows, QUE NO EL OBJETO de Xailer, se destruye
> cuando se cierra el formulario, siempre que lHideOnClose no esté a
> verdadero.
Entendido. Osea que después del oForm:ShowModal() ya no puedo volver a
hacer otro oForm:Show() dado que la ventana *sí* fue destruida. ¿No?
>
> El objeto de Xailer se destruye automáticamente cuando deja de ser
> referenciado y el recolectar de basura de xHarbour lo destruye.
>
Tambien entendido. Por eso, aún despues de cerrar el formulario tengo
acceso a sus datas... eso me gusta... está muy bien!!!
Saludos y gracias!
José Luis Capel
¿Cuando se destruye completamente un formulario?
Publicado: Mar Sep 20, 2005 12:02 pm
por jfgimenez
José Luis,
> Entendido. Osea que después del oForm:ShowModal() ya no puedo volver a
> hacer otro oForm:Show() dado que la ventana *sí* fue destruida. ¿No?
Efectívamente.
> Tambien entendido. Por eso, aún despues de cerrar el formulario tengo
> acceso a sus datas... eso me gusta... está muy bien!!!
Exactamente. No obstante, tienes que tener en cuenta un detalle: los
controles también han sido ya destruidos, aunque siguen existiendo los
objetos correspondientes.
P.ej: si tienes un control oEdit1 en un formulario, una vez que se haya
cerrado y destruido, podrás seguir accediendo al valor de oEdit1
(::oEdit1:Value) sin ningún problema.
Pero en cambio, hay algunas propiedades de algunos controles que no se
guardan en el objeto, sino que se obtienen directamente del control a través
del API. P.ej., si creas un listbox con lMultipleSel a .T., podrás obtener
un array con los items que estén seleccionados usando el método
GetSelItems(), pero sólo mientras el control existe. Una vez que el
formulario (y el control) han sido destruidos, ese método devolverá siempre
un array vacio.
Por eso (y otras razones) existe la propiedad lHideOnClose de TForm.
Poniéndola a .T. cuando el usuario cierra el formulario o se llama a
:Close() por código, el formulario no se destruye, sino que simplemente se
oculta. Todos los controles que contiene siguen existiendo y se puede
consultar cualquier propiedad. Además, puedes volver a llamar a :Show() o
:ShowModal() cuando quieras. Pero eso sí, cuando de verdad no necesites ese
formulario y quieras destruirlo deberás llamar al método :End() del mismo,
de lo contrario seguirá existiendo mientras el programa siga funcionando.
--
Un saludo,
José F. Giménez