Cita:
Posteado originalmente por santiago14
Ahora... como resuelvo el problema??
|
¿Cómo creas Form2?
Como te dije antes, si usas una variable local a Form1 entonces Form3 no la verá; sólo verá la variable Form2 declarada en Unit2 que es nil ya que no está en el "auto-create".
Puedes hacer lo siguiente:
No usar una variable local al momento de crear Form2 sino usar la declarada en Unit2. Desde luego debes agregar Unit2 a la cláusula
uses tanto de Unit1 como de Unit3 para qe ambas la vean. Lo correcto es en la parte de implementación.
Por otra parte, según entiendo de tu código, Form3 la necesitas para asignar un valor a un cuadro de texto de Form2 y la cierras apenas sucede esto.
No es muy buena idea acceder a los controles de un formulario desde otro formulario; incluso hay quienes piensan que los controles de un formulario deberían ser privados y no públicos cómo hace Delphi.
Piensa en lo que hace un cuadro de diálogo como FileOpen. El diálogo no coloca ningún valor en el formulario que lo abre; lo que hace es dejar ese valor en una propiedad pública (FileName en este caso) de manera que el formulario que lo abrió puede usar el valor.
Dicho esto quizá te convenga algo así:
Código:
TForm3 = class(TForm)
public
Propiedad: String;
end;
En el evento OnCloseQuery de Form3 pones:
Código:
if ModalResult = mrOk then
Propiedad := el valor que necesitas;
Form2 llamará a Form3 así:
Código:
with TForm3.Create(nil) do
begin
if ShowModal = ID_OK then
Edit1.Text := Propiedad;
Free;
end;
El punto fino en ésto es la separación de trabajos. Regresando al FileOpenDialog, éste no sabe, ni tiene por qué saber nada acerca del formulario que lo llama; su labor es escoger un archivo y
punto
En tu caso me parece que es algo similar; Form3 no tiene por qué saber de la existencia de Form2, simplemente hace su labor de ajustar Propiedad y
punto.
// Saludos