Delphi 在其他形式中使用声明的公共变量时出现编译器错误
我以前声明过许多公共变量,但在Delphi中,XE3是第一个 我声明公共var是好的,但不能在其他形式上使用它,但我不知道为什么 我的主要代码:Delphi 在其他形式中使用声明的公共变量时出现编译器错误,delphi,variables,public,delphi-xe3,Delphi,Variables,Public,Delphi Xe3,我以前声明过许多公共变量,但在Delphi中,XE3是第一个 我声明公共var是好的,但不能在其他形式上使用它,但我不知道为什么 我的主要代码: unit uMian; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCt
unit uMian;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
btnLoad: TButton;
btnShow: TButton;
btnEaxit: TButton;
lvStudent: TListView;
btnAdd: TButton;
procedure btnEaxitClick(Sender: TObject);
procedure btnLoadClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnAddClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
var
IsOpen : Boolean ;
public
{ Public declarations }
var
myvar : Integer ;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses uAdd;
function AppDir () : string ;
begin
Result := ExtractFilePath(Application.ExeName);
end;
procedure TForm1.btnAddClick(Sender: TObject);
begin
if IsOpen then
frmAdd.ShowModal ;
end;
procedure TForm1.btnEaxitClick(Sender: TObject);
begin
close;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if IsOpen then
//CloseFile(DataFile);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
IsOpen := False ;
end;
....
end.
这是一项毫无问题的好工作
但当我在其他表格FrmAdd上使用时,我遇到了问题:
unit uAdd;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons,
Vcl.Samples.Spin, Vcl.ExtCtrls;
type
TfrmAdd = class(TForm)
lbledtName: TLabeledEdit;
lbledtAvg: TLabeledEdit;
seAge: TSpinEdit;
lbleId: TLabeledEdit;
btnCansek: TBitBtn;
btnAdd: TBitBtn;
procedure btnAddClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmAdd: TfrmAdd;
implementation
{$R *.dfm}
uses uMian;
procedure TfrmAdd.btnAddClick(Sender: TObject);
begin
// problem in below
ShowMessage(IntToStr(TForm1.myvar)) ;
end;
end.
编译器错误:
[dcc32错误]uAdd.pas(问题行):应为E2096方法标识符
注意:Cnpack在变量列表中显示我
myvar
,但Rad Studio自动完成不显示 myvar
是对象的公共变量,即类TForm1
的实例。因此,您需要指定所引用的实例。但是当您编写TForm1.myvar
时,您没有指定任何实例,只指定了类
这就像知道每个人都有一种被称为“性”的属性,然后你问,“人的性别是什么?”。[哪个人?]
解决方案是编写someform.myvar
,其中someform
是TForm1
的一个实例。例如,Form1.myvar
,很可能就是您想要的。请注意,您可以在uMain
中找到var Form1:TForm1
。这是声明表单变量的行:您得到了一个指向类TForm1
的对象的变量
因此,相反,您会问,“您的朋友Smith的性别是什么?”
myvar
是对象的公共变量,即类TForm1
的实例。因此,您需要指定所引用的实例。但是当您编写TForm1.myvar
时,您没有指定任何实例,只指定了类
这就像知道每个人都有一种被称为“性”的属性,然后你问,“人的性别是什么?”。[哪个人?]
解决方案是编写someform.myvar
,其中someform
是TForm1
的一个实例。例如,Form1.myvar
,很可能就是您想要的。请注意,您可以在uMain
中找到var Form1:TForm1
。这是声明表单变量的行:您得到了一个指向类TForm1
的对象的变量
因此,你会问:“你朋友史密斯的性别是什么?”哦,谢谢你的回答:)+1代表“性别”,因为当然,眼睛的颜色和高度都很无聊。如果让我猜的话,史密斯是一个棕色眼睛,175厘米的男性。哦,谢谢你的回答:)+1代表“性”,因为当然,眼睛的颜色和高度都很无聊。如果让我猜的话,Smith是一个棕色眼睛、175厘米长的男性。根据您使用Instanced变量或class变量的意图,您必须更改您的声明:class var myvar:integer;或者调用Instance.myvar根据您使用Instanced变量或类变量的意图,您必须更改声明:class var myvar:integer;或者调用Instance.myvar