Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Duda principiante con manejo de formularios (https://www.clubdelphi.com/foros/showthread.php?t=30205)

Chompiras 11-02-2006 01:13:42

Duda principiante con manejo de formularios
 
Yo tengo un formulario (llamemosló F1). Este tiene un menu, desde el cual se accede a otro formulario(llamemosló F2). El tema es que tengo varios combobox en F2, en los cuales si seleccionaba algun valor, y luego cerraba a F2, cuando lo volvia a abrir (desde F1) seguian estando, entonces mi pregunta es...¿Por que siguen estando almacenados los valores si yo lo cerre (o sea, no se tendrian que perder los valores seleccionados)?

Editado:
Otra cosa relacionada con formularios, cuando cierro F2, quiero capturar los valores de los combobox que tengo ahi y ponerlos en variables de F1 y no se bien como hacerlo, ya que no entiendo del todo que informacion se pueden intercambiar ambos formularios y como se hace esto. Yo tenia pensado hacer que en el evento close de F2 llame a un proceso almacenado en F1, el cual haria todo lo que acabo de decir en la segunda duda de este hilo...¿estaria bien hecho asi?

vtdeleon 11-02-2006 02:35:01

Saludos

El por que siguen los valores en los combobox puede ser porque en realidad el F2 no se destruye totalmente, sino que oculta. Para destruirlo por en su evetno Onclose==> Action:=caFree. Entonces para llamar a este formulario debes crearlo y mostrarlo
Código Delphi [-]
procedure noseque;
begin
  F2:=TF2.Create(Application);
  F2.Show;//o Showmodal
end;

Con respectoa pasar valores de F2 a F1, puedes usar variables globales o declarar propiedades para el intercambio de datos entre uno y otro; teniendo en cuenta que debes pasar los valores de F2 a F1 antes de cerrar o destruir F2.

roman 11-02-2006 02:43:21

1. Cuando cierras el formulario, por defecto sólo se oculta y por ello al abrirlo de nuevo todo sigue igual. Puedes cambiar este comportamiento poniendo

Código Delphi [-]
Action := caFree;

en el evento OnClose del formulario F2. Nota no obstante que entonces deberás crearlo nuevamente cuando lo quieras mostrar.

2. Un formulario puede acceder a las componentes y propiedades públicas de cualquier otro formulario con tan sólo incluir su unidad en la cláusula uses. Sin embargo, tal como lo planteas es una mala práctica:

¿Qué hace F2?

Permite al usuario seleccionar ciertos valores. Tal y como, por ejemplo, un cuadro "Abrir archivo" le permite seleccionar un archivo. Dicho de otra manera, F2 es un formulario meramente auxiliar y no tiene porqué saber que pasa con esos valores.

A quien sí le importa es a F1, ya que es quien los requiere. Lo usual es que F1 use F2.ShowModal para mostrar al formulario auxiliar ya que de esta manera, tiene control de cuándo se cierra y puede así tomar sus valores:

Código:

F2.ShowModal;
Variables <-- F2.Valores

De hecho F1 puede acceder directamente a los combos de F2. Pero esto también es mala idea pues te limita a poder en un futuro cambiar la interfaz de F2. A fin de cuentas a F1 no le interesa cómo hace F2 para obtener sus valores, sólo requiere estos últimos. Es lo mismo que con el mencionado cuadro "Abrir archivo". Cuando lo usamos no sabemos con precisión que controles use internamente, sólo nos interesa su propiedad FileName.

Entonces, lo correcto es crear propiedades públicas, por ejemplo una por cada valor requerido. Cuando F2 se cierre, en su evento OnClose llena estas propiedades tomando los valores de sus combos. Así F1 sólo necesita acceder a esas propiedades públicas.

// Saludos

roman 11-02-2006 02:45:40

¿Otra vez? Caramba, que se me adelanta Troi y además sin tanto rollo como yo :D Creo que mejor me voy a cenar :p

// Saludos

vtdeleon 11-02-2006 02:48:55

Jeje:D:D:D

Que te aproveche la cena ;)

Saludos

FGarcia 11-02-2006 17:21:06

El teclado mas rapido del Oeste
 
:d :d :d :d

Chompiras 11-02-2006 20:49:55

Gracias a todos!!
 
Genial, entendi perfectamente todo lo que me dijieron, gracias a todos!!!

Pd: Roman, por mas que se te hayan adelantado al responder, gracias igual, ya que tu respuesta me ayudo a terminar de entender algunos pequeños detalles que no habia entendido aun.


La franja horaria es GMT +2. Ahora son las 00:05:58.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi