Ошибка компилятора при использовании объявленных открытых переменных в других формах
Я объявляю многие публичные переменные назад, но в 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
,
Вместо этого вы спрашиваете: "Каков пол вашего друга Смита?"