1

私は多くのパブリック変数を前に宣言していますが、Delphi-XE3 では最初にあります。

public 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.

こちらは問題なく動作良好です。

しかし、他のフォーム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 メソッド識別子が必要です

注: Cnpackmyvarは変数リストに表示されますが、Rad Studio オートコンプリートは表示されません。

4

1 に答える 1

10

myvarオブジェクトのパブリック変数、つまりclassのインスタンスTForm1です。したがって、参照しているインスタンスを指定する必要があります。ただし、 を記述するときはTForm1.myvar、インスタンスを指定せず、クラスのみを指定します。

それは、人間にはそれぞれ「性別」という性質があることを知っているのに、「人間の性別は何ですか?」と尋ねるようなものです。【どの人間?】

someform.myvar解決策は、代わりに書くことです。ここsomeformで、 は a のインスタンスですTForm1。たとえばForm1.myvar、 が必要な可能性が最も高いです。var Form1: TForm1にあることに注意してくださいuMain。これは、フォーム変数が宣言されている行です: クラス のオブジェクトを指す変数を取得しましたTForm1

代わりに、「あなたの友人のスミスの性別は?」と尋ねます。

于 2013-02-15T11:34:11.933 に答える