Reputation: 3635
I got Form1 with some variables and I want to pass it to another Form3 where I'll use it. So I have two questions.
How can I get access to the variable in another form? I suppose it will be similar to
var newIdList:= Form1.idList
When var idList get value in
procedure TForm1.Button1Click(Sender: TObject);begin
idList:=strtoint(edit1.text);
end
and I show new form in another can I still get value in idList
?
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.hide;
form3.show;
end
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
Label5: TLabel;
Edit3: TEdit;
Edit2: TEdit;
Button3: TButton;
Edit4: TEdit;
Button2: TButton;
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Label3: TLabel;
Label2: TLabel;
Edit5: TEdit;
Label7: TLabel;
Label6: TLabel;
Button4: TButton;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit4Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Edit1Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
idList,imieList,nazwiskoList,adresList: TStringList;
end;
var
Form1: TForm1;
plik:TStringList;
tempPlik:TextFile;
st:string;
linia_klient,linia_video:array[0..20] of string;
id:integer;
implementation
uses Unit3;
{$R *.dfm}
.
.
.
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
Edit1.Text:='Witaj, Podaj ID klienta';
Label1.Caption:='ID Klienta';
idList:=TStringList.Create;
imieList:=TStringList.Create;
nazwiskoList:=TStringList.Create;
adresList:=TStringList.Create;
if (FileExists('idList.txt')=true) then idList.LoadFromFile('idList.txt') else idList.SaveToFile('idList.txt');
if (FileExists('imieList.txt')=true) then imieList.LoadFromFile('imieList.txt') else imieList.SaveToFile('imieList.txt');
if (FileExists('nazwiskoList.txt')=true) then nazwiskoList.LoadFromFile('nazwiskoList.txt') else nazwiskoList.SaveToFile('nazwiskoList.txt');
if (FileExists('adresList.txt')=true) then adresList.LoadFromFile('adresList.txt') else adresList.SaveToFile('adresList.txt');
AssignFile(tempPlik,'video.txt');
Reset(tempPlik);
i:=0;
While Not Eof(tempPlik) do
begin
Readln(tempPlik,linia_video[i]);
inc(i);
end;
CloseFile(tempPlik);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
//Form1.Hide;
Form3.Show;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm3 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form3: TForm3;
implementation
uses Unit1;
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
Form3.Hide;
//Form1.Show;
end;
procedure TForm3.FormShow(Sender: TObject);
begin
Label4.Caption:= intToStr(idList.Count);
end;
end.
Upvotes: 3
Views: 27684
Reputation: 109138
(I will assume that each form resides in its own unit.) First, you have to make sure that idList
is accessible to other units. For example,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
idList: integer;
public
{ Public declarations }
end;
will not do, but
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
idList: integer;
end;
is OK. In such case, all you need to do in Unit2
is to add Unit1
to its 'uses list' (press Alt+F11, or use File/'Use Unit...', while in Unit2
or while editing Form2
). Then you can use Form1.idList
to access the variable anywhere inside Unit2
. (Form1
is the global instance variable of TForm1
in Unit1
).
For example,
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses Unit1; // <-- Add manually, or press Alt+F11 (or use File/'Use Unit...')
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(Form1.idList));
end;
end.
Upvotes: 9
Reputation: 24907
'How can I get access to variable in another form?' - yes, as long as the variable is a public or published member and you have acess to the instance variable, you can access it in the same way as any other class instance variable. Usually, this means adding the unit containing the 'Form1' class to the uses clause of the unit where access is desired.
'and I show new form in another can I still get value in idList?' - sure, as long as the form exists, you have access to the form instance variable and 'idList' is public or published.
Upvotes: 2