急呀,请教一下,窗体间如何进行变量值的传递????

powre 2017-09-15 05:44:06
唉,初学者就是心累,对于大神们来说很简单的问题,我这里一卡就是一天。还是登录界面的值传递到另一个窗体的问题,要把Form1里面的帐号和权限传递到Form3窗体(Form2是模块类),请问如何实现?
我查过书,也百度过,方法就是在Form1中定义一个记录,在Form1的uses中加入Unit3,在Form3中的uses中加入Unit1,然后
Form3.show后,在Form3窗体中调用出来。代码如下,有劳各位大神费心了!

Form1代码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;

type
UserInfo = record
UserName: string;
UserPassword:string;
UserRole:string;
end;

type

TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;



procedure BitBtn1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
Auser:UserInfo;

end;

var
Form1: TForm1;
ActionCD:string;

implementation

uses Unit3, Unit2;

{$R *.dfm}

procedure TForm1.BitBtn1Click(Sender: TObject);
begin

if(Trim(Edit1.Text)='') then
begin
showMessage('请输入帐号');
Edit1.SetFocus();
exit;
end;

if(Trim(Edit2.Text)='') then
begin
showMessage('请输入密码');
Edit2.SetFocus();
exit;
end;

with DataModule2.ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from users where UserName=:a and Password=:b'); //查找帐号密码
Parameters.ParamByName('a').Value:=Edit1.Text;
Parameters.ParamByName('b').Value:=Edit2.Text;
Open;

if RecordCount=1 then
begin
showMessage('登录成功!');

{ showMessage('你的帐号是:'+FieldByName('username').AsString +
'你的密码是:'+FieldByName('password').AsString +
'你的权限是:'+FieldByName('role').AsString);



UserInfo:=TUserInfo.Create;
UserInfo.UserName:= FieldByName('username').AsString;
UserInfo.UserPassword:=FieldByName('password').AsString;
UserInfo.UserRole:=FieldByName('role').AsString;
}

Auser.UserName:= FieldByName('username').AsString;
Auser.UserPassword:= FieldByName('password').AsString;
Auser.UserRole:= FieldByName('role').AsString;
showMessage(Auser.UserRole);
Form3.Show;

end
else
// showMessage('帐号或密码错误,请重新输入!');
MessageBox(handle,'用户名或密码有误,请重试!','非法用户',MB_ICONSTOP+mb_ok);
Edit1.Text:='';
Edit2.Text:='';
exit;
end;

end;


end.



Form3(传递变量的结果):

unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm3 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form3: TForm3;

implementation

{$R *.dfm}
uses Unit1,Unit2;

procedure TForm3.FormCreate(Sender: TObject);
begin
Label1.Caption:='你的帐号是:'+ Form1.Auser.UserName;
end;

end.

结果就是显示不出来,我查了好久没发现问题,请教一下各位大神,如何实现?谢谢了!

...全文
618 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
秋天之落叶 2017-12-30
  • 打赏
  • 举报
回复
楼主是如何测试成功了呢?问题出在哪里了?和大家分享一下吧?
日月路明 2017-12-25
  • 打赏
  • 举报
回复
引用 10 楼 tanqth 的回复:
通常项目中,建立一个全局变量文件、全局常量文件、共用函数文件,把这些共用的都分别归总处理,其他需要的地方引用文件直接使用就可以的。
hongss 2017-12-25
  • 打赏
  • 举报
回复
引用 10 楼 tanqth 的回复:
通常项目中,建立一个全局变量文件、全局常量文件、共用函数文件,把这些共用的都分别归总处理,其他需要的地方引用文件直接使用就可以的。
这样做比较清楚。 也可以直接指向某Unit的Public变量,就是需要清除这些变量在哪,引用的时候需要指向而已
秋天之落叶 2017-12-24
  • 打赏
  • 举报
回复
当然,放在procedure TForm3.FormShow(Sender: TObject);中也是可以的,哈哈
秋天之落叶 2017-12-24
  • 打赏
  • 举报
回复
我觉得你不能放在procedure TForm3.FormCreate(Sender: TObject);中,创建中找不到变量,状态不对,而是应该放在procedure TForm3.FormActivate(Sender: TObject);中,窗体创建后可以找到变量,你试一试。
xiaocongzhi 2017-12-24
  • 打赏
  • 举报
回复
Form3中写个全局函数用来传传值,Form1中调用即可
tanqth 2017-12-24
  • 打赏
  • 举报
回复
通常项目中,建立一个全局变量文件、全局常量文件、共用函数文件,把这些共用的都分别归总处理,其他需要的地方引用文件直接使用就可以的。
SupermanTm 2017-12-24
  • 打赏
  • 举报
回复
增加一个 Global.pas 单元文件,把传递信息放这里(interface 里的 var),然后 Unit1,Unit2,Unit3 的implementation里都 uses Global.pas
jeetliang 2017-12-23
  • 打赏
  • 举报
回复
引用另一个FORM,可以直接传的啊
powre 2017-09-15
  • 打赏
  • 举报
回复
真的不会,能提供一个简单的例文件吗?
lyhoo163 2017-09-15
  • 打赏
  • 举报
回复
读书是硬道理,如此问题,让人无法下手。 窗体间,变量交换,可以通过: 1、USES加入对方单元解决。 2、双方共用全局变量。 3、通过指定单元的变更或事件,如 Form1.Button
powre 2017-09-15
  • 打赏
  • 举报
回复
还是不太懂,能举个例子吗?
老之 2017-09-15
  • 打赏
  • 举报
回复
TForm3类增加一个SetUserName的公共方法和FUserName这样的成员 procedure TForm3::SetUserName(username: string) begin FUserName = username; end; 创建了对象之后,调用一下方法,就可以传过去了, 之后访问FUserName。

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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