【发布时间】:2015-05-05 02:30:48
【问题描述】:
使用德尔福 XE7。我只想将框架加载到面板中,然后单击按钮以在运行时查询框架内的标签标题属性。我似乎无法让它工作。请指教。谢谢。
单元 1 中的面板 2
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils,
System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls;
type
TForm1 = class(TForm)
Button4: TButton;
Panel2: TPanel;
procedure Button4Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
uses Unit3{TFrame3};
procedure TForm1.Button4Click(Sender: TObject);
begin
ShowMessage(Frame3.Label4.caption);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Frame3.parent:=Panel2;
end;
end.
本单元中的Frame3
unit Unit3;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TFrame3 = class(TFrame)
Label4: TLabel;
private
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
end;
var
Frame3: TFrame3;
implementation
{$R *.dfm}
constructor TFrame3.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
end;
destructor TFrame3.Destroy;
begin
inherited Destroy;
end;
end.
当编译正常,但遇到错误 - “第一次机会异常在 $005E098C。异常类 $C0000005 带有消息'访问冲突在 0x005e098c: 读取地址 0x00000000'。处理 Project1.exe (8416)”
【问题讨论】:
-
在 TForm1.FormCreate 中引用 Frame3 之前,需要先对其进行实例化。如果您在该行上放置了一个断点,您会看到 Frame3 = nil,因此您的访问冲突
-
谢谢。我刚刚在这里更新。我添加“Frame3.parent::=Panel2”。如何启动它?
-
像任何其他课程一样。 Frame3 := TFrame3.Create(Self);除非 Frame3 将被 Form1 以外的东西使用,否则您应该从 Unit3 中删除全局 Frame3 变量并将其声明为 TForm1 中的私有字段
标签: delphi