这是我的代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
...
implementation
{$R *.dfm}
uses Unit2;
...
procedure TForm1.Button4Click(Sender: TObject);
begin
Frame2.Show;
end;
我收到了这个编译错误:
未声明的标识符:'Frame2'
然后我试着宣布:
Frame2: TFrame2;
进一步表达评论。
好的,我会准确的。我使用anwser ardnew Frame2:TFrame;我得到**访问违规**并且没有它我得到未声明的标识符:'Frame2'现在我更精确?
答案 0 :(得分:4)
你没有显示Unit2的内容,所以我们只能推测。听起来在Unit2.pas中没有声明Frame2
全局变量。这将导致undeclared identifier
错误。自己声明变量,然后在TFrame2
之前实例化Show()
类的实例,例如:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;
...
implementation
{$R *.dfm}
uses
Unit2;
var
Frame2: TFrame2 = nil;
...
procedure TForm1.Button4Click(Sender: TObject);
begin
if not Assigned(Frame2) then
begin
Frame2 := TFrame2.Create(Self);
Frame2.Parent := Self;
end;
Frame2.Show;
end;
答案 1 :(得分:0)
你需要以某种方式创建框架,没有它就无法访问它。
此示例假设您一次创建2个不同的“TFrame2”实例暂时,然后在完成时关闭(并释放)它们(在try..finally块中)。还有许多其他的创建和释放方式,但一般的概念是如果你创建它,你必须释放它......
procedure TForm1.Button4Click(Sender: TObject);
var
F1, F2: TFrame2;
begin
//You have to first create the instances of "TFrame2"...
F1:= TFrame2.Create(Self);
F2:= TFrame2.Create(Self);
try
F1.Left:= 0;
F2.Left:= Self.Width - F2.Width;
F1.Parent := Self;
F2.Parent := Self;
F1.Show;
F2.Show;
Application.ProcessMessages;
ShowMessage('There should be 2 instances of "TFrame2" showing on your main form');
finally
//And you have to free them when you're done...
F1.Free;
F2.Free;
end;
end;
或者如果这个“TFrame2”在其他地方......
procedure TForm1.Create(Sender: TObject);
begin
//Create it first
Frame2:= TFrame2.Create(Self);
Frame2.Parent := Self;
Frame2.Left:= 0;
Frame2.Show;
end;
procedure TForm1.Destroy(Sender: TObject);
begin
if assigned(Frame2) then begin
Frame2.Free;
Frame2:= nil;
end;
end;
但请注意,因为您可能已经创建了这个“TFrame2”...转到Project > Options > Forms
并查看“Frame2”是否自动创建。
答案 2 :(得分:-3)
我想它应该被声明为
Frame2: TFrame;