我想在另一个窗体中使用我的主窗体中的变量,每个窗体都有自己的单元。
我想在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.
在我的结果单元中,我得到了错误未声明的标识符,我使用了激活过程和一条show消息作为测试
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.
我读过一些关于这方面的文章,但我总是迷路,我是一个高中生,所以它不需要复杂的代码。
发布于 2016-09-29 06:12:38
通常你不应该使用全局变量。IDE会在您创建窗体时添加全局窗体变量,并在启动时自动创建它们。
试着养成删除这些变量的习惯,并避免在启动时创建它们。正常情况下,只有主菜单在启动时是足够的。
登录表单应该是一个模式对话框。为btnLogin
按钮指定ModalResult值mrOk
。这意味着当按钮被按下时,登录表单将关闭,并显示此结果。请注意,必须删除单元TfrmLogin
中的uses Result_u;
声明。
下面是如何创建登录表单以及如何通过TFrmLogin
实例获取iUser
值的演示:
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.
发布于 2016-09-29 04:58:07
使用该变量的最简单方法是将它的声明移出form类,这样它就是全局的、始终可用的(不需要创建和寻址form的实例)。
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中使用它,就像您已经尝试过的那样。
注意:当一个变量需要在窗体的每个实例中保存不同的值时,可以在窗体类的公共部分中声明该变量(就像您在代码中所做的那样)。
https://stackoverflow.com/questions/39757159
复制相似问题