【问题标题】:Delphi: embed frame into panel and query the property of label inside the frameDelphi:将框架嵌入面板并查询框架内标签的属性
【发布时间】: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


【解决方案1】:

您需要先创建一个框架实例,然后才能在表格 1 中引用它。

将您的 TForm1.FormCreate 事件设置为:

 procedure TForm1.FormCreate(Sender: TObject);
 begin
    Frame3 := TFrame3.Create(Self);
    Frame3.Align := alClient;
    Frame3.Parent := Panel2;
 end;

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 2011-08-06
    • 2021-05-08
    • 1970-01-01
    • 2012-04-04
    • 2014-12-04
    • 2014-06-11
    • 2021-03-31
    • 1970-01-01
    相关资源
    最近更新 更多