Ошибка компилятора при использовании объявленных общедоступных переменных в других формах

Я объявлял много общедоступных переменных назад, но в 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.


person A1Gard    schedule 15.02.2013    source источник
comment
в зависимости от вашего намерения использовать переменную instaced или переменную класса вам придется изменить свое объявление: Class var myvar: integer; или ваш звонок в Instance.myvar   -  person bummi    schedule 15.02.2013


Ответы (1)


myvar - это общедоступная переменная объекта, то есть экземпляр класса TForm1. Следовательно, вам необходимо указать какой экземпляр вы имеете в виду. Но когда вы пишете TForm1.myvar, вы не указываете никакого экземпляра, только класс.

Это как знать, что у каждого человека есть свойство, известное как «пол», и затем вы спрашиваете: «Какой пол у человека?». [Какой человек?]

Решение состоит в том, чтобы вместо этого написать someform.myvar, где someform - это экземпляр TForm1. Например, Form1.myvar, скорее всего, то, что вы хотите. Обратите внимание, что вы найдете var Form1: TForm1 в uMain. Это строка, в которой объявлена ​​переменная формы: у вас есть переменная, указывающая на объект класса TForm1.

Вместо этого вы спрашиваете: «Какой пол у вашего друга Смита?»

person Andreas Rejbrand    schedule 15.02.2013
comment
О, спасибо за свой ответ :) - person A1Gard; 15.02.2013
comment
+1 за секс, потому что цвет глаз и рост, конечно, скучны. И если угадать, Смит кареглазый, 175 см мужчина. - person Cosmin Prund; 15.02.2013