将变量传递给不同的表单/单位

时间:2016-09-28 20:33:56

标签: forms delphi variables

我想以另一种形式使用主表单中的变量,每个表单都有自己的单位。

我想在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.

我已经阅读了一些关于此的文章,但我一直迷路,我是一名高中生,因此不需要复杂的代码。

2 个答案:

答案 0 :(得分:2)

通常你不应该使用全局变量。创建表单时IDE会添加全局表单变量,并在启动时自动创建它们。

尝试养成删除这些变量的习惯,避免在启动时创建它们。通常在启动时只有主菜单就足够了。

登录表单应该是模式对话框。为btnLogin按钮指定ModalResultmrOk。这意味着当按下按钮时,将使用此结果关闭登录表单。请注意,必须删除单位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中使用它,就像您已经尝试过的那样。

注意:当该变量需要在表单的每个实例中保存不同的值时,您在表单类的公共部分中声明一个变量(就像在代码中所做的那样)。