Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   pasar valores de variables de un form a otro (https://www.clubdelphi.com/foros/showthread.php?t=33545)

oscarpinog 10-07-2006 22:25:33

pasar valores de variables de un form a otro
 
me explico: form1 (principal) y form2 (relacionadas como about), en form 2 genero valores de variables a y b

como puedo pasar valores de variables de un form2 a form 1 y utilizarlas??

no soy experto y mas aún, ahora con delphi 2005 ando medio colgado..

saludos y muchisimas gracias.

dec 10-07-2006 22:33:43

Hola,

Hay varias formas de conseguir lo que precisas. Puedes declarar las variables del "Form2" como variables públicas, de modo que estén accesibles desde "Form1". También puedes declarar dichas variables como propiedades de "TForm2", de manera que puedas acceder a las mismas, si es que las propiedades son públicas.

Si no lo son, o no quieres que lo sean, siempre puedes emplear algún método público que sirviera para iniciarlizar las propiedades/variables correspondientes desde "Form1". No sé yo si te he resuelto algo o te dejo con más dudas... si las tienes ya sabes que puedes exponerlas por aquí para que alguien trate de echarte una mano.

Un ejemplo utilizando propiedades públicas:

Código Delphi [-]
// Unit1.pas

unit Unit1;

interface

uses
  Forms, Classes, Controls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  Unit2; // TForm2

procedure TForm1.Button1Click(Sender: TObject);
var
  frm: TForm2;
begin
  // Instanciamos
  frm := TForm2.Create(Self);
  {
    Damos el valor que sea menester
    a las propiedades "A" y "B" del
    formulario "TForm2"
  }
  frm.A := 'Una cadena';
  frm.B := 'Otra cadena';

  // Mostramos el formulario (por ejemplo)
  frm.ShowModal;

  // Y, por último, destruimos el objeto "frm"
  frm.Free;
end;

end.

Código Delphi [-]
// Unit2.pas

unit Unit2;

interface

uses
  Forms;

type
  TForm2 = class(TForm)
  private
    {
      Un par de variables privadas
      que almacenarán los valores de
      las propiedades de más abajo.
    }
    FA, FB: string;
  public
    // Propiedades públicas A y B
    property A: string read FA write FA;
    property B: string read FB write FB;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

end.

oscarpinog 11-07-2006 00:30:06

pasar valores de variables de un form a otro
 
david muchas gracias por tu ayuda..

Sabes no entendi como funcionan las propiedades de las variables fa y fb en unit2 y como relaciono eso con un valor (por ejemplo, que provenga de una casilla de texto)

y no entiendo el procedimiento de unit1, que es frm y pq se crea?? que debe hacer en frm.A y frm.B ?? (que aparte no le lo reconoce como bueno en el script)

quede bien mas colgado... sabes donde pueda quiza leer al respecto??

saludos y mucha gracias denuevo.

nemesio 11-07-2006 03:25:39

Hola

Yo te lo diría de la siguiente forma:

En la seccion var de el Form2, declaras las variables A y B. Luego desde el Form1 para accesarlas escribes: Unit2.A , Unit2.B.
Claro que debes incluir la unit2 en el use de la Unit1.

Suerte.

oscarpinog 11-07-2006 05:27:01

pasar valores de variables de un form a otro
 
Hola, Miren coloco esto... y por mas que le doy vueltas, no me pasa el valor de editabout.text hacia editform1.text.. de hecho me borra el contenido original de editform1 y seria todo...
aca va el codigo:

Código Delphi [-]
// codigo de unit1 (programa principal)
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Editform1: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  A,B: String;

implementation

uses about;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 frm: Taboutbox;
begin
  frm:= Taboutbox.Create(self);
//  frm.A:= z    ;
//  frm.B:= x    ;

  editform1.text:=frm.A;

  frm.showmodal;
  frm.free;



//aboutbox.ShowModal;
end;

end.

// codigo del about
unit ABOUT;

interface

uses Windows, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls;

type
  TAboutBox = class(TForm)
    Panel1: TPanel;
    OKButton: TButton;
    ProgramIcon: TImage;
    ProductName: TLabel;
    Version: TLabel;
    Copyright: TLabel;
    Comments: TLabel;
    editabout: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    Fa, Fb: String;   { Private declarations }
  public
    Property A: String read Fa Write Fa; { Public declarations }
    Property B: String read Fb Write Fb;
  end;

var
  AboutBox: TAboutBox;

implementation

{$R *.dfm}

procedure TAboutBox.Button1Click(Sender: TObject);
begin
A:= editabout.Text ;
end;

end.

Gracias por todo, de verdad se pasaron chiquilllos!

Lepe 11-07-2006 10:55:02

Si lo hace, pero no recoges el valor:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
frm: Taboutbox;
begin
frm:= Taboutbox.Create(self);
// frm.A:= z ;
// frm.B:= x ;

if frm.showmodal =mrOk then
begin
  editform1.text:=frm.A;
  ShowMessage(editform1);
end;
frm.free;

El punto está que al ser modal, cuando se pulsa en el Button1 (que supongo será un TBitBtn y que devuelve mrOk) es donde se asigna a "A" el valor que debe retornar, por ello tienes que esperar a que se retorne mrOk o bien mrCancel.

Antes de pulsar el botón, la propiedad "A" tendrá un valor indefinido (o por defecto).

Saludos

oscarpinog 11-07-2006 20:30:24

Heyy!! compadre diste en el clavo, funciona perfecto!! 1000 gracias!!!

Se los agradezco infinito, antes mis programas eran de 1 form y eran gigantes apareciendo y desapareciendo cosas..jaaj
Gracias!!!

oscarpinog 12-08-2007 04:18:39

Hola a todos denuevo, saben ahora necesito pasar del form1 al form2 y no me resulta. se me cae el programa por violacion de acceso de no se que cosa.

recordando. logre gracias a uds. pasar datos desde el form2 al form1(main) y ahora me gustaria poder hacer tambien lo contrario.
aqui va el codigo:
--------------------------FORM1 (main)
unit MainProgramFPv1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, StdCtrls, Buttons,
Mask, XPMan;

type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
GroupBox1: TGroupBox;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
DBEdit10: TDBEdit;
DBEdit11: TDBEdit;
DBEdit12: TDBEdit;
GroupBox2: TGroupBox;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
DBEdit14: TDBEdit;
DBEdit15: TDBEdit;
DBEdit16: TDBEdit;
DBEdit17: TDBEdit;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
ADOTable2: TADOTable;
Label19: TLabel;
DBEdit13: TDBEdit;
Label26: TLabel;
DBEdit19: TDBEdit;
DBNavigator2: TDBNavigator;
GroupBox4: TGroupBox;
INGRESOS: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Isalario: TDBEdit;
Idividendo: TDBEdit;
Ibienrais: TDBEdit;
Inegocio: TDBEdit;
Iinteres: TDBEdit;
Itotal: TDBEdit;
BI1: TBitBtn;
BI2: TBitBtn;
BI3: TBitBtn;
BI4: TBitBtn;
BI5: TBitBtn;
EGRESOS: TGroupBox;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
Label24: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit18: TDBEdit;
BE1: TBitBtn;
BE2: TBitBtn;
BE3: TBitBtn;
BE4: TBitBtn;
BE5: TBitBtn;
BE6: TBitBtn;
BE7: TBitBtn;
GroupBox3: TGroupBox;
DataSource1: TDataSource;
ADOTable1: TADOTable;
XPManifest1: TXPManifest;
Label25: TLabel;
DBEdit20: TDBEdit;
BA1: TBitBtn;
BA2: TBitBtn;
BA3: TBitBtn;
BA4: TBitBtn;
BO1: TBitBtn;
BO2: TBitBtn;
BO3: TBitBtn;
BO4: TBitBtn;
BO5: TBitBtn;
BO6: TBitBtn;
BO7: TBitBtn;
Edit1form1: TEdit;
DBNavigator3: TDBNavigator;
DBComboBox1: TDBComboBox;
Label27: TLabel;
procedure BI1Click(Sender: TObject);
procedure BI2Click(Sender: TObject);
private
{ Private declarations }
Fc, Fd: Integer;
public
{ Public declarations }
Property C: Integer Read Fc Write Fc;
Property D: Integer Read Fd Write Fd;
end;

var
Form1: TForm1;
A,B: String;

implementation
{$R *.dfm}

uses ventana1;

procedure TForm1.BI1Click(Sender: TObject);
begin
Form1.C:=1; // boton 1
if Form2.ShowModal=mrok then
edit1form1.Text:=Form2.A;
end;
end.
--------------------------------FORM 2

unit ventana1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, DB, ADODB, Mask, DBCtrls;

type
TForm2 = class(TForm)
Edit1form2: TEdit;
BitBtn1: TBitBtn;
Gsalarios: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
DBEdit10: TDBEdit;
DataSource1: TDataSource;
ADOTable1: TADOTable;
Label11: TLabel;
DBEdit11: TDBEdit;
Gdividendo: TGroupBox;
procedure BitBtn1Click(Sender: TObject);

private
{ Private declarations }
Fa, Fb: String;
public
{ Public declarations }
Property A: String Read Fa Write Fa;
Property B: String Read Fb Write Fb;
end;

var
Form2: TForm2;
C,D: Integer;

implementation

uses MainProgramFPv1;

{$R *.dfm}

procedure TForm2.BitBtn1Click(Sender: TObject);
begin
A:=Edit1form2.Text;
end;

begin
if Form1.C = 1 then // aqui me muestra el error de excepcion nose que.. y se muere//
Form2.label2.Visible := true;
end.
--------------------------
Gracias
Oscar.


La franja horaria es GMT +2. Ahora son las 11:23:21.

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