Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Llamados a objetos entre formularios (https://www.clubdelphi.com/foros/showthread.php?t=66444)

cmagno 19-02-2010 21:03:29

Llamados a objetos entre formularios
 
Saludos a todos:

Tengo el siguiente caso: Tengo un Formulario1 que al presionar determinado botón llama a un Formulario2. A su vez, el Formulario2 llama a objetos (en particular TSimpleDataSet) del Formulario1, algo como Formulario1.Query1.Dataset ... etc. El tema es que el Formulario2 puede ser "reutilizado" por muchos formularios que lo llamen... la pregunta es ¿cómo puedo hacer para que Formulario2 haga referencia a los objetos del formulario que lo llama? Los formularios que hacen el llamado en escencia tienen los mismos compenentes TSimpleDataSet.

La idea es que en el Formulario2 se pueda hacer algo como:

FormularioBase.Query1.DataSet... donde FormularioBase puede ser cualquier formulario.

No se si me hago entender lo suficiente. De antemano gracias por la colaboración.

roman 19-02-2010 21:51:21

Hola,

En mi opinión, tienes un problema de diseño. Formulario2 debería ser totalmente independiente de cualquier otro formulario. Si dicho formulario debe manejar los datos de otros formularios, deja que esos otros formularios le pasen los datos por medio de propiedades.

Por ejemplo, Formulario2 podría tener una propiedad pública DataSet:

Código Delphi [-]
TFormulario2 = class(TForm)
private
  FDataSet: TDataSet;

public
  property DataSet: TDataSet read FDataSet write FDataSet;
end;

Si otro formulario necesita usarlo, haría algo como:

Código Delphi [-]
Formulario2 := TFormulario2.Create;
Formulario2.DataSet := Self.Query1.DataSet;
Formulario2.ShowModal;

Y Formulario2 trabajaría entonces con la variable FDataSet, y no dependería de quién lo llamó.

// Saludos

cmagno 19-02-2010 22:38:17

Hola roman. Gracias por la respuesta. Estamos de acuerdo es un problema de diseño... la inquietud surgió porque el Formulario2 tiene muchos DataSet y existen varias copias de Formulario2 (digamos Formulario3, etc.) para cada formulario principal que lo llama. Definitivamente es un problema para el mantenimiento por lo que, ahora que estoy a cargo de la aplicación quería simplificar las cosas. La solución que tengo en mente es utilizar DataModules para evitar que los DataSet se asocien a un formulario en particular... la verdad quería evitar eso porque son muchísimos y debo organizar los DataSource de otros tantos componentes... pero bueno... será mejor que vaya empezando...

The_Duke 19-02-2010 22:41:01

:DTambién podrías crear una variable global que indique de que formulario fue llamado e formulario 2 por ejemplo.

Código Delphi [-]
var

  Form1: TForm1;
  form_llama: integer;


procedure TForm1.B1Click(Sender: TObject);
begin
 form_llama:=1;
Form2.ShowModal;
end;


Eso es para llamarlo ahí le especifica si es del 1 y así sucesivamente le vas agregando una identificación a cada uno y en el form2 bastaría con ver con la variable form_llama cual lo llamo


La franja horaria es GMT +2. Ahora son las 15:35:12.

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