我想以另一种形式使用主表单中的变量,每个表单都有自己的单位。
我想在Result_u
中使用Login_u中的iUser我发现了一篇文章,他们说我应该把变量放在公开声明中,然后在实施中使用,然后是想要访问变量的单位'。同样在想要访问实现使用的变量的单元中,然后是想要获取变量的单元名称
unit Login_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;
type
TfrmLogin = class(TForm)
btnLogin: TButton;
cbxUser: TComboBox;
procedure btnLoginClick(Sender: TObject);
private
{ Private declarations }
public
iUser:Integer;
{ Public declarations }
end;
var
frmLogin: TfrmLogin;
implementation
uses Result_u;
{$R *.dfm}
procedure TfrmLogin.btnLoginClick(Sender: TObject);
begin
iUser:= cbxUser.ItemIndex;
end;
end;
end.
在我的结果单元中,我得到错误未声明的识别符,我使用了激活程序和显示消息作为测试
unit Result_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, jpeg, ExtCtrls;
type
TfrmResult = class(TForm)
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmResult: TfrmUitslae;
implementation
uses Login_u;
{$R *.dfm}
procedure TfrmUitslae.FormActivate(Sender: TObject);
begin
ShowMessage(iUser);
end;
end.
我已经阅读了一些关于此的文章,但我一直迷路,我是一名高中生,因此不需要复杂的代码。
答案 0 :(得分:2)
通常你不应该使用全局变量。创建表单时IDE会添加全局表单变量,并在启动时自动创建它们。
尝试养成删除这些变量的习惯,避免在启动时创建它们。通常在启动时只有主菜单就足够了。
登录表单应该是模式对话框。为btnLogin
按钮指定ModalResult值mrOk
。这意味着当按下按钮时,将使用此结果关闭登录表单。请注意,必须删除单位uses Result_u;
中的TfrmLogin
声明。
以下是如何创建登录表单以及如何通过iUser
的实例获取TFrmLogin
值的演示:
unit Result_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, DBGrids, jpeg, ExtCtrls;
type
TfrmResult = class(TForm)
procedure TestLogin;
private
{ Private declarations }
public
{ Public declarations }
end;
implementation
uses Login_u;
{$R *.dfm}
procedure TfrmResult.TestLogin;
var
frmLogin: TFrmLogin;
begin
frmLogin := TFrmLogin.Create(Nil);
try
if frmLogin.ShowModal = mrOk then
ShowMessage('User login index is:'+IntToStr(frmLogin.iUser));
finally
frmLogin.Free;
end;
end;
end.
答案 1 :(得分:0)
使用该变量的最简单方法是将其声明移出表单类,因此它将是全局的,始终可用(无需创建和寻址表单的实例)。
unit Login_u;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, StdCtrls;
type
TfrmLogin = class(TForm)
btnLogin: TButton;
cbxUser: TComboBox;
procedure btnLoginClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmLogin: TfrmLogin;
iUser:Integer;
implementation
uses Result_u;
{$R *.dfm}
procedure TfrmLogin.btnLoginClick(Sender: TObject);
begin
iUser:= cbxUser.ItemIndex;
end;
end;
end.
现在您可以在Result_u中使用它,就像您已经尝试过的那样。
注意:当该变量需要在表单的每个实例中保存不同的值时,您在表单类的公共部分中声明一个变量(就像在代码中所做的那样)。