delphi窗体之间的相互传值

这篇博客介绍了如何在Delphi中实现窗体间的值传递。通过定义一个用户信息类,初始化并赋值,然后在第二个窗体中引用并显示这些值。在Form1中创建Form2对象并显示,而在Form2的FormCreate事件中获取Form1中的用户信息,并显示在相应控件上。关键步骤包括设置Form2的AutoCreate属性为Available。

效果图如下所示


Form1代码

//定义一个用户信息类

type
  TUsersInfo=class
    //声明三个全局变量
    public
       UserName: string;
       UserPwd:string;
       UserAge:Integer;
  end;

//引用form2

uses Unit2;

//定义用户信息对象

var
  UsersInfo:TUsersInfo; 

//初始化并付初值

procedure TForm1.btn1Click(Sender: TObject);
begin
    //创建窗体对象
    UsersInfo:=TUsersInfo.Create;
    //赋值初始化
    UsersInfo.UserName:='小王';
    UsersInfo.UserPwd:='123456';
    UsersInfo.UserAge:=18;
    //手动运行启动窗体
    Application.CreateForm(TForm2,Form2);
    //显示窗体
    Form2.Show;
end;


在窗体form2里面写如下代码

uses Unit1;//引用form1

//窗体初始化代码

procedure TForm2.FormCreate(Sender: TObject);
begin
    //将Form类里面的数据传递过来
     edt1.Text:= UsersInfo.UserName;
     edt2.Text:=UsersInfo.UserPwd;
     edt3.Text:=IntToStr( UsersInfo.UserAge );
end;


最后一步比较关键了,因为我们要显示form2而且是传值的情况下,我们就要将form2的autocreate改成available即可,如下图所示:


按OK确认。


Delphi中实现父子窗体有多种方式,以下结合引用示例说明: ### 父窗体向子窗体 以引用[2]中的场景为例,父窗体文件名是`MAIN`,`FORM`名字是`MainForm`,子窗体的文件名是`Unit1`,`FORM`名字是`Form1`。若要从父窗体向子窗体,可在子窗体中定义一个公共变量来接收父窗体递的。 在子窗体`Unit1.pas`中: ```delphi unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; private { Private declarations } public MyValue: string; // 定义公共变量用于接收父窗体 end; var Form1: TForm1; implementation {$R *.dfm} end. ``` 在父窗体`MAIN.pas`中: ```delphi unit MAIN; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit1; type TMainForm = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.Button1Click(Sender: TObject); begin Form1 := TForm1.Create(Self); Form1.MyValue := '要递的'; // 给子窗体的公共变量赋 Form1.Show; end; end. ``` ### 子窗体向父窗体 同样以引用[2]的场景为例,若要从子窗体向父窗体,可在父窗体中定义一个公共变量或属性,子窗体通过访问父窗体来修改该变量或属性。 在父窗体`MAIN.pas`中: ```delphi unit MAIN; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit1; type TMainForm = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public MyReceivedValue: string; // 定义公共变量用于接收子窗体 end; var MainForm: TMainForm; implementation {$R *.dfm} procedure TMainForm.Button1Click(Sender: TObject); begin Form1 := TForm1.Create(Self); Form1.Show; end; end. ``` 在子窗体`Unit1.pas`中: ```delphi unit Unit1; interface uses 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; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin MainForm.MyReceivedValue := Edit1.Text; // 将子窗体递给父窗体的公共变量 Self.Close; end; end. ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值