2013-02-15 37 views
1

我在之前聲明瞭許多公共變量,但在Delphi-XE3中處於第一位。使用其他形式聲明的公共變量的編譯器錯誤

我聲明公共變量良好,但不能用於其他形式,但我不知道爲什麼?

我主要的團結代碼:

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自動完成不是。

+0

根據您打算使用instaced變量或類變量,您將不得不更改您的聲明:Class var myvar:integer;或者你的電話Instance.myvar – bummi 2013-02-15 11:39:16

回答

10

myvar是一個對象的公共變量,即類TForm1實例。因此,你需要指定你指的是什麼實例。但是當你寫TForm1.myvar時,你不指定任何實例,只指定類。

就像知道每個人都有一個被稱爲「性」的屬性,然後你問:「人的性別是什麼?」。 [哪個人類?]

解決方案是寫someform.myvar代替,其中someformTForm1的一個實例。例如,Form1.myvar,很可能是你想要的。請注意,您在uMain中找到var Form1: TForm1。這是聲明表單變量的行:您有一個變量指向類TForm1的對象。

所以,你問,「你的朋友史密斯是什麼性別?」

+0

哦,謝謝你的答案:) – 2013-02-15 11:39:03

+2

+1爲「性」,因爲當然,眼睛的顏色和身高都很無聊。如果我不得不猜測,史密斯是一個棕色眼睛,175釐米*男*。 – 2013-02-15 11:46:21