声明变量时出现问题

时间:2011-12-14 00:00:44

标签: delphi

这是我的代码:

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'现在我更精确?

3 个答案:

答案 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;