Ir al contenido


Foto

¿Cómo apuntar a una variable global de otro formulario?


  • Por favor identifícate para responder
7 respuestas en este tema

#1 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 10 enero 2009 - 03:21

Hola amigos, quería preguntarles si es posible asignar un valor a un variable global que se encuentra en otro formulario, o sea, hago esto para llamar un formulario:



delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3. FForm2 := TFForm2.Create(self);
  4.   try
  5.     Form2.ShowModal;
  6.   finally
  7.     Form2.Free;
  8.   end;
  9. end;



Pero quisiera asignarle el valor a una variable del Form2, algo como esto:



delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3. FForm2 := TFForm2.Create(self);
  4.   try
  5.     Form2.Variable := 'tal cosa';
  6.     Form2.ShowModal;
  7.   finally
  8.     Form2.Free;
  9.   end;
  10. end;



Pero no se puede, ¿cómo le hago?.

Fleon xD
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 10 enero 2009 - 03:32

Solo agregale las propiedades públicas que consideres convenientte




delphi
  1. TForm2
  2.   Public
  3.     Variable: String;
  4.   End;



De esa manera podrás hacer la asignación de valor como deseas.

Suerte
  • 0

#3 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 10 enero 2009 - 03:43

Gracias Poliburro, otra cosa aparte de declararlo en las propiedades públicas, ¿también debe estar declarada como variable global?:



delphi
  1. Var
  2.   Form2: TForm2;
  3.   Variable: String;



Fleon xD
  • 0

#4 Caral

Caral

    Advanced Member

  • Administrador
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 10 enero 2009 - 03:45

Hola
Aparte de lo dicho, tienes un error de escritura en el from, quedaria asi:


delphi
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. begin
  3.    Form2 := TForm2.Create(self);
  4.  try
  5.    Form2.Variable := 'tal cosa';
  6.    Form2.ShowModal;
  7.  finally
  8.    Form2.Free;
  9.  end;
  10. end;


saludos
  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 10 enero 2009 - 04:22

Gracias Poliburro, otra cosa aparte de declararlo en las propiedades públicas, ¿también debe estar declarada como variable global?:



delphi
  1. Var
  2.   Form2: TForm2;
  3.   Variable: String;



Fleon xD



No. Son conceptos totalmente diferentes.

saludos
  • 0

#6 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 10 enero 2009 - 04:29

Muchas gracias Poliburro, ya me di cuenta de que no es necesario declararla de nuevo y gracias Caral por corregir mi error. un abrazo.

Fleon xD
  • 0

#7 Delphius

Delphius

    Advanced Member

  • Moderador
  • PipPipPip
  • 6.295 mensajes
  • LocationArgentina

Escrito 10 enero 2009 - 04:50

Hola Fleon,
Ten muy presente de que esa variable global, como cualquier otro elemento o atributo que pertenezca al form2, sólo podrá ser accedida mientras existe en memoria dicho form. Una vez que se libere, si haces uso de una lectura vas a tener error.

Tu código tiene un mecanismo seguro. Eso es lo bueno.

Lo que es conveniente remarcar es que en todo caso no sería una variable global, sino local a Form2. Una variable global tiene un ciclo de vida independiente de los form. Se mantiene "viva" mientras el aplicativo esté en acción y puede ser accedida desde cualquier punto del sistema.

Lo que podrías considerar, es tal vez en vez de usar una variable directa, el uso de propiedades. En caso de que el valor que se necesita guardar responda a ciertas reglas de control (como por dar un ejemplo: que si es entero no sea mayor a 100, o cosas por el estilo), lo más recomendable es que se use propiedades:


delphi
  1. TForm2 = class(TForm)
  2. private
  3.   FVariable: integer;
  4.   procedure SetVariable;
  5. public
  6.   property Variable: integer; read FVariable write SetVariable;
  7.   ....
  8. end;



Luego, este método Set, realizará los controles adecuados antes de pasar el valor a FVariable:



delphi
  1. procedure TForm2.SetVariable(Valor: integer);
  2. begin
  3.   if Valor <= 100
  4.     then FVariable := Valor;
  5.     else .....
  6. end;



De ese modo cuando quieras pasar un valor seguirías empleando el mismo código sin problemas y además dejas que form2 realice las comprobaciones necesarias.

Si no hay ninguna restricción en el valor, es útil emplear una variable en forma directa y no gastar código en métodos, y/o propiedades.

Saludos,
  • 0

#8 MasterXP

MasterXP

    Member

  • Miembros
  • PipPip
  • 13 mensajes
  • LocationRepública Dominicana

Escrito 11 enero 2009 - 12:26

muy buena explicacion Delphius  (h)
  • 0