如何将一个窗体中得到的值传给另一个窗体的变量? 在form2中先use form1单元名,则form2中的变量=form1.edit1.text 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这样可以吗?应该可以如果不可以定义一个全局变量些个小函数,在FORM2中调用这个函数,就可以了 Form2中定義一個全局變量 A﹐在Form1中來一句﹕Form2.A:=Edit1.Text; 最好新建一个专门放置变量的单元:unit_global;定义变量vars1:string;unit_global.s1:form2.edit1.text;在form2中调用就可以了。这样做最好。强烈建议用此规范。特别是大的系统。 各位的方法我都试了,还是有些问题请教。我说详细一些:做一个财务软件。--------------------1.DataModule中的qryJob中有一个房基金的计算字段Fjj。2.房基金字段的计算公式中有两个变量(因为房基金每年都要变)s(系数 定义为Currency类型)、per(百分比 定义为single)。3.此计算字段的公式在DataModule单元的OnCalcFields过程中计算。4.数据显示在frmTable窗体中。5.另想设计一个改变房基金变量的窗体frmFjj,edtS和edtPer分别输入这两个变量。-----------------------问题:如果在DM中将变量初始化,即使改变,每次执行后还是原来的初始值。如果不初始化,只是将edt的text传给变量,程序开始运行edt是空的,变量得不到值。---------再帮帮忙,再加100分。 up!!!!$150 give you!!!only you give me a hand!!! 在定义Form1的地方定义一个变量,然后把值付给它,在Form2中,uses Form1的单元,然后就可以用了 我看你这段描述都快疯了!首先,你有一个数据模块:DataModule(简称DM)。其次,在这个DM中你定义了两个变量:edtS和edtPer再者,你想将窗体中,用户出入的变量值传递到DM中,是吗?解答:1.在DM中将变量初始化2.在出入变量值窗体中先use DM3.再将 DM.edts := ...... 看这里//窗体1代码unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; private { Private declarations } public { Public declarations } hehe:integer; //这个变量 end;var Form1: TForm1;implementation{$R *.DFM}end.//窗体2代码unit Unit2;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type TForm2 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementationuses Unit1;{$R *.DFM}procedure TForm2.FormCreate(Sender: TObject);begin form1.hehe:=1; //这里就用了窗体1的变量heheend;end.这下总该满意了吧,刚开始学DELPHI吧?是有些费劲的,过一段时间就好了:) 试一下数据传递的方法unit1var ds: TCopyDataStruct; hd: THandle;begin ds.cbData := Length(Edit1.Text) + 1; GetMem(ds.lpData, ds.cbData ); { 为传递的数据区分配内存 } StrCopy(ds.lpData, PChar(Edit1.Text)); Hd := FindWindow(nil, 'Form2'); { 获得接受窗口的句柄 } if Hd <> 0 then SendMessage(Hd, WM_COPYDATA, Handle, Cardinal(@ds)) { 发送WM_COPYDATA消息 } else ShowMessage('目标窗口没找到!'); FreeMem(ds.lpData); { 释放资源 }end;unit2 public procedure WMCopyData(var S: TWmCopyData); message WM_COPYDATA;procedure TForm2.WMCopyData(var S: TWmCopyData);begin edtS := StrPas(S.CopyDataStruct^.lpData);end; 全都理解错了!edtS和edtPer是两个TEdit文本框的名字!我想在这两个TEdit中写入值然后传到DM中的两个变量s和per中。s和per是在public中定义的,也可以运行,但有没有想过这是有语义错误的。如果你在DM中初始化变量后,另一窗体传来的值这次会变,但关闭程序下次再打开时又会初始化为原来的值。我要的是一直受Tedit控制的值。 DM.s := {Form1.}edtS.Text;DM.per := {Form1.}edtPer.Text; 表内字段根据字段不同做同一个字段的相减 我写的程序,连接数据库时,提示是病毒攻击,怎么回事??? 怎么接触系统锁定? 用com+做三层,客户端到底应该怎么写?(盼望高手) 如何正确使用database控件的starttransaction功能 不知道窗体类名及窗口标题,如何获取窗口句柄? DELPHI6的网络组件稳定性比DELPHI5有无改进? 大清早一来就发现收藏夹被clear了.... DCOM三层结构问题 救命啊!一个关于分离文件的问题!!!! 谁知道瑞星的网上升级密码???? 如何将窗体中TEdit的值写入数据库?
如果不可以
定义一个全局变量
些个小函数,在FORM2中调用这个函数,就可以了
Form2.A:=Edit1.Text;
定义变量
var
s1:string;unit_global.s1:form2.edit1.text;在form2中调用就可以了。
这样做最好。
强烈建议用此规范。特别是大的系统。
我说详细一些:
做一个财务软件。
--------------------
1.DataModule中的qryJob中有一个房基金的计算字段Fjj。
2.房基金字段的计算公式中有两个变量(因为房基金每年都要变)s(系数 定义为Currency类型)、per(百分比 定义为single)。
3.此计算字段的公式在DataModule单元的OnCalcFields过程中计算。
4.数据显示在frmTable窗体中。
5.另想设计一个改变房基金变量的窗体frmFjj,edtS和edtPer分别输入这两个变量。
-----------------------
问题:
如果在DM中将变量初始化,即使改变,每次执行后还是原来的初始值。
如果不初始化,只是将edt的text传给变量,程序开始运行edt是空的,变量得不到值。
---------再帮帮忙,再加100分。
$150 give you!!!
only you give me a hand!!!
首先,你有一个数据模块:DataModule(简称DM)。
其次,在这个DM中你定义了两个变量:edtS和edtPer
再者,你想将窗体中,用户出入的变量值传递到DM中,是吗?
解答:
1.在DM中将变量初始化
2.在出入变量值窗体中先use DM
3.再将 DM.edts := ......
//窗体1代码
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
hehe:integer; //这个变量
end;var
Form1: TForm1;implementation{$R *.DFM}end.//窗体2代码
unit Unit2;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
TForm2 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form2: TForm2;implementationuses Unit1;{$R *.DFM}procedure TForm2.FormCreate(Sender: TObject);
begin
form1.hehe:=1; //这里就用了窗体1的变量hehe
end;end.
这下总该满意了吧,刚开始学DELPHI吧?是有些费劲的,过一段时间就好了
:)
ds: TCopyDataStruct;
hd: THandle;
begin
ds.cbData := Length(Edit1.Text) + 1;
GetMem(ds.lpData, ds.cbData ); { 为传递的数据区分配内存 }
StrCopy(ds.lpData, PChar(Edit1.Text));
Hd := FindWindow(nil, 'Form2'); { 获得接受窗口的句柄 }
if Hd <> 0 then
SendMessage(Hd, WM_COPYDATA, Handle, Cardinal(@ds)) { 发送WM_COPYDATA消息 }
else
ShowMessage('目标窗口没找到!');
FreeMem(ds.lpData); { 释放资源 }
end;unit2 public
procedure WMCopyData(var S: TWmCopyData); message WM_COPYDATA;procedure TForm2.WMCopyData(var S: TWmCopyData);
begin
edtS := StrPas(S.CopyDataStruct^.lpData);
end;
我想在这两个TEdit中写入值然后传到DM中的两个变量s和per中。
s和per是在public中定义的,也可以运行,但有没有想过这是有语义错误的。如果你在DM中初始化变量后,另一窗体传来的值这次会变,但关闭程序下次再打开时又会初始化为原来的值。我要的是一直受Tedit控制的值。
DM.per := {Form1.}edtPer.Text;