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

procedure TMyPanel.AfterConstruction;
begin
  inherited AfterConstruction;
  Caption := '';
end;

建設中にキャプションをクリアしたいのですが、このコードは期待どおりに動作しません。キャプションを空の文字列に設定しません。キャプションに「 」(スペース)を付けると残りますが、これは適切な解決策ではありません。

Delphi 2006 を使用しています。

4

1 に答える 1

5

これを試して:

uses
  ExtCtrls, StrUtils;

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

procedure TMyPanel.Loaded;
  inherited;
  Caption := EmptyStr;
end;

テスト済みで、XE2 で正常に動作するようです。

編集

OPに示されているメソッドが機能しない場合にこれが機能する理由は、オブジェクトのプロパティ値がDFMファイルから割り当てられたLoadedに呼び出されるためです。

へのオーバーライドされた呼び出しAfterConstructionは、オブジェクトの最初の作成後、プロパティ値がフォームの DFM から割り当てられるAfterConstructionに行われます。つまり、メソッドで割り当てたプロパティ値は、同じプロパティに指定された値に即座に置き換えられます。 DFMで。

Loadedは構築順序の最後に行われるため、そこに割り当てた値は最終的なものになります。

于 2012-06-13T10:50:04.990 に答える