如何在施工期间在TPanel后代设置标题?

hub*_*azs 1 delphi vcl

TMyPanel = class(TPanel)
public
  procedure AfterConstruction; override;
end;

procedure TMyPanel.AfterConstruction;
begin
  inherited AfterConstruction;
  Caption := '';
end;
Run Code Online (Sandbox Code Playgroud)

我想在构造期间清除标题,但是这段代码不能像我期望的那样工作.它不会将标题设置为空字符串.如果我将''(空格)分配给Caption,它将保留,但这不是一个合适的解决方案.

我正在使用Delphi 2006.

LaK*_*ven 5

试试这个:

uses
  ExtCtrls, StrUtils;

type
  TMyPanel = class(TPanel)
  public
    procedure Loaded; override;
  end;

procedure TMyPanel.Loaded;
  inherited;
  Caption := EmptyStr;
end;
Run Code Online (Sandbox Code Playgroud)

经过测试,似乎在XE2中运行良好.

编辑:

这是因为在OP中显示的方法不是因为从DFM文件中分配了对象的属性值之后Loaded调用的原因.

重写调用AfterConstruction发生在初始创建对象之后,但是从Form的DFM分配属性值之前,这意味着您在AfterConstruction方法中分配的任何属性值将立即替换为为同一属性指定的任何值在DFM中.

Loaded发生施工订单的最后,所以你指定的任何价值都将是最终的.

  • 是的,你是对的.尽管如此,事实上只有当组件从dfm流式传输时才会调用Loaded.所以你也不能依赖Loaded. (2认同)