值的传递问题?谢谢! 值的传递!先定义公共变量,然后在另一单元中调用,我试了是可以的,但是他传递的值只可以在oncreate事件里现在我想在form里的edit里输入的值传递到另一个单元中,如何做啊? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 另一个单元?什么意思?写在public下都可用呀只要你引用了这个窗体 你可以在你想要使用该值得地方,use该单元,直接引用,就行,可以使用全局变量试是, 这么可能呢?按照我下面做的呢试试。 private { Private declarations } public { Public declarations } end;var Form1: TForm1; temp:string;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin temp:=edit1.Text; form2.showmodal;end;。。 public { Public declarations } end;var Form2: TForm2;implementationuses unit1;{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);beginlabel1.Caption:=temp;end;这样就可以了 把变量定义到var下面是绝对可以的,如果你不使用这种全局变量,那么就在form1关闭之前在form2中取得这个edit的值,也可以取到的。只要你取值的时候form1没有被销毁掉,你随时都可以取得form1中edit的值。 unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; temp:string;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin temp:=edit1.Text; form2.ShowModal;end;end.==================================unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm2 = class(TForm) Edit1: TEdit; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm} uses unit1;procedure TForm2.FormCreate(Sender: TObject);begin edit1.Text:=temp;end;end.=======================这样为什么取不到值啊? 改为:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } temp:string; //这 end;var Form1: TForm1;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin temp:=edit1.Text; form2.ShowModal;end;end.==================================unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm2 = class(TForm) Edit1: TEdit; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm} uses unit1;procedure TForm2.FormCreate(Sender: TObject);begin edit1.Text:=TForm1.temp;end;end. 楼上的谢谢这个定义全局我试了,但是效果是一样的!edit里没有值!!!!!!!!!!!!!!!!!!!!!!!! 你的意思是不是要把填入当前窗体中的Edit的数据实时传递到另一个窗体的变量中去啊?在Edit的OnChange事件中写:if Assigned(From2) then From2.变量名:= Edit1.text; 先Use要传递值的单元.. 然后写上要要传递值单元函数据或过程...send(edit1.text); 就行啦... 我的意见: 单元之间的相互引用容易引起混淆。我一直是这样:专门设一个单元列出全局变量,在有些时候,我还专门写一个全局变量类,这样一些变量的初始化和一些临时的操作编会非常方便。例如这样Unit VarUnit //在这个单元中定义各全局变量interfaceVar Temp:String;implementationend.==================================unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Edit1: TEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1; temp:string;implementationuses VarUnit,Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);begin temp:=edit1.Text; form2.ShowModal;end;end.==================================unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm2 = class(TForm) Edit1: TEdit; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementation{$R *.dfm} uses VarUnit;procedure TForm2.FormCreate(Sender: TObject);begin edit1.Text:=temp;end;=================================这样肯定没有问题,而且避免了窗体之间相互引用的混乱,对程序设计和维护有益。end. 如何保证dbgrid总显示最后一行 dll封装mdi问题,在线等,很急!!!! FormatDateTime()函数为何计算有误呢? 帮忙解答一个 简单的问题? 一个入门问题大家不要笑我,窗口怎么切换? ParamCount和ParamStr()是什么函数?中文解释 请问各路高手如何获得机器的CPU标识,基于该标识的加密一般是如何实现的,请指点? 怎样向sybase的时间字段里插入一个空值?在线等!!! 请问如何获得win9x的用户名 发红包了,发红包了!再次进行大放分!!! 如何從Execl文檔中將數據導入到數據庫中 在dbgrid中如操作对应的列行的值?
只要你引用了这个窗体
直接引用,就行,
可以使用全局变量试是,
。
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
temp:string;implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
temp:=edit1.Text;
form2.showmodal;
end;
。。
public
{ Public declarations }
end;var
Form2: TForm2;implementation
uses unit1;{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);
begin
label1.Caption:=temp;
end;这样就可以了
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;
temp:string;
implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
temp:=edit1.Text;
form2.ShowModal;
end;end.
==================================
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}
uses unit1;
procedure TForm2.FormCreate(Sender: TObject);
begin
edit1.Text:=temp;
end;end.
=======================
这样为什么取不到值啊?
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
temp:string; //这 end;var
Form1: TForm1;
implementationuses Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
temp:=edit1.Text;
form2.ShowModal;
end;end.
==================================
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}
uses unit1;
procedure TForm2.FormCreate(Sender: TObject);
begin
edit1.Text:=TForm1.temp;
end;end.
谢谢
这个定义全局我试了,但是效果是一样的!
edit里没有值!!!!!!!!!!!!!!!!!!!!!!!!
From2.变量名:= Edit1.text;
然后写上要要传递值单元函数据或过程...send(edit1.text);
就行啦...
单元之间的相互引用容易引起混淆。我一直是这样:专门设一个单元列出全局变量,在有些时候,我还专门写一个全局变量类,这样一些变量的初始化和一些临时的操作编会非常方便。
例如这样Unit VarUnit //在这个单元中定义各全局变量interfaceVar
Temp:String;implementationend.
==================================unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations } end;var
Form1: TForm1;
temp:string;
implementationuses
VarUnit,Unit2;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
temp:=edit1.Text;
form2.ShowModal;
end;end.
==================================
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;type
TForm2 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementation{$R *.dfm}
uses VarUnit;
procedure TForm2.FormCreate(Sender: TObject);
begin
edit1.Text:=temp;
end;=================================
这样肯定没有问题,而且避免了窗体之间相互引用的混乱,对程序设计和维护有益。end.