如何将一个窗体中得到的值传给另一个窗体的变量?

marf_cn 2002-09-13 10:05:02
比如:
我在Form1中的Edit1中输入数据,按Button后如何将Edit1.Text的值传给Form2中定义的变量?
多谢了!
...全文
522 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
marf_cn 2002-09-16
  • 打赏
  • 举报
回复
我最后决定把这两个变量存入数据库,这样问题就解决了。
多谢各位了!!
marf_cn 2002-09-13
  • 打赏
  • 举报
回复
各位的方法我都试了,还是有些问题请教。
我说详细一些:
做一个财务软件。
--------------------
1.DataModule中的qryJob中有一个房基金的计算字段Fjj。
2.房基金字段的计算公式中有两个变量(因为房基金每年都要变)s(系数 定义为Currency类型)、per(百分比 定义为single)。
3.此计算字段的公式在DataModule单元的OnCalcFields过程中计算。
4.数据显示在frmTable窗体中。
5.另想设计一个改变房基金变量的窗体frmFjj,edtS和edtPer分别输入这两个变量。
-----------------------
问题:
如果在DM中将变量初始化,即使改变,每次执行后还是原来的初始值。
如果不初始化,只是将edt的text传给变量,程序开始运行edt是空的,变量得不到值。
---------再帮帮忙,再加100分。
timelyraining 2002-09-13
  • 打赏
  • 举报
回复
最好新建一个专门放置变量的单元:unit_global;
定义变量
var
s1:string;

unit_global.s1:form2.edit1.text;



在form2中调用就可以了。
这样做最好。
强烈建议用此规范。特别是大的系统。
SayForever 2002-09-13
  • 打赏
  • 举报
回复
Form2中定義一個全局變量 A﹐在Form1中來一句﹕
Form2.A:=Edit1.Text;
jiaxianglei 2002-09-13
  • 打赏
  • 举报
回复
up
ptpa 2002-09-13
  • 打赏
  • 举报
回复
这样可以吗?应该可以
如果不可以
定义一个全局变量
些个小函数,在FORM2中调用这个函数,就可以了
上海老李 2002-09-13
  • 打赏
  • 举报
回复
up,被你先说了!
njjiangzj 2002-09-13
  • 打赏
  • 举报
回复
在form2中先use form1单元名,则form2中的变量=form1.edit1.text
王集鹄 2002-09-13
  • 打赏
  • 举报
回复
DM.s := {Form1.}edtS.Text;
DM.per := {Form1.}edtPer.Text;
marf_cn 2002-09-13
  • 打赏
  • 举报
回复
全都理解错了!edtS和edtPer是两个TEdit文本框的名字!
我想在这两个TEdit中写入值然后传到DM中的两个变量s和per中。
s和per是在public中定义的,也可以运行,但有没有想过这是有语义错误的。如果你在DM中初始化变量后,另一窗体传来的值这次会变,但关闭程序下次再打开时又会初始化为原来的值。我要的是一直受Tedit控制的值。
ilang 2002-09-13
  • 打赏
  • 举报
回复
试一下数据传递的方法

unit1

var
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;
xdf_hubei 2002-09-13
  • 打赏
  • 举报
回复
看这里
//窗体1代码
unit Unit1;

interface

uses
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;

interface

uses
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;

implementation

uses Unit1;

{$R *.DFM}

procedure TForm2.FormCreate(Sender: TObject);
begin
form1.hehe:=1; //这里就用了窗体1的变量hehe
end;

end.


这下总该满意了吧,刚开始学DELPHI吧?是有些费劲的,过一段时间就好了
:)

ocool 2002-09-13
  • 打赏
  • 举报
回复
up
zhjing70 2002-09-13
  • 打赏
  • 举报
回复
我看你这段描述都快疯了!
首先,你有一个数据模块:DataModule(简称DM)。
其次,在这个DM中你定义了两个变量:edtS和edtPer
再者,你想将窗体中,用户出入的变量值传递到DM中,是吗?
解答:
1.在DM中将变量初始化
2.在出入变量值窗体中先use DM
3.再将 DM.edts := ......
xdf_hubei 2002-09-13
  • 打赏
  • 举报
回复
在工程里定义全局变量不就行了????
ybbob 2002-09-13
  • 打赏
  • 举报
回复
i:=form1.edit1.text;
marf_cn 2002-09-13
  • 打赏
  • 举报
回复
up!
有没有人帮我一下!!!我疯了!
swtju94_2 2002-09-13
  • 打赏
  • 举报
回复
在定义Form1的地方定义一个变量,然后把值付给它,在Form2中,uses Form1的单元,然后就可以用了
marf_cn 2002-09-13
  • 打赏
  • 举报
回复
up!!!!
$150 give you!!!
only you give me a hand!!!
zhxzhx 2002-09-13
  • 打赏
  • 举报
回复
你可以在窗体创建时在做一次初始化的动作那就可以正确地把这个值传到dm里去了,要耗些时间
加载更多回复(1)

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧