使用时编译错误以其他形式声明公共变量

A1G*_*ard 1 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.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.
Run Code Online (Sandbox Code Playgroud)

这是没有问题的工作.

但当我在其他形式使用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.
Run Code Online (Sandbox Code Playgroud)

编译器错误:[dcc32错误] uAdd.pas(问题行):E2096预期的方法标识符

注意:Cnpack显示myvar变量列表但Rad Studio自动完成没有.

And*_*and 10

myvar是对象的公共变量,即类的实例TForm1.因此,你需要指定什么你指的实例.但是当你写作时TForm1.myvar,你不指定任何实例,只指定类.

这就像知道每个人都有一种被称为"性"的属性,然后你会问,"人类的性别是什么?".[ 哪个人?]

解决方案是编写代码someform.myvar,其中someform是a的实例TForm1.例如,Form1.myvar很可能是你想要的.请注意,你找到var Form1: TForm1uMain.这是声明表单变量的行:您有一个指向类对象的变量TForm1.

所以,相反,你问,"你的朋友史密斯的性别是什么?"

  • +1为"性",因为当然,眼睛的颜色和身高都很无聊.如果我不得不猜测,史密斯是一个棕色眼睛,175厘米*男*. (2认同)