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

Я объявляю многие публичные переменные назад, но в 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 Ожидается идентификатор метода

Примечание: Cnpack покажи мне myvar в списке переменных, но Rad Studio Auto-Complete нет.

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам