如何防止控件被添加到从TCustomPanel派生的组件中?

时间:2016-11-23 09:33:25

标签: delphi components

我已经定义了一个派生自TCustomPanel的组件,但有时我不小心在其中添加了一些其他控件。

运行时:

  TMyPanel = class(TCustomPanel)
  public
    //...
  end;

设计时间:

procedure Register();
begin
  RegisterCustomModule(TCustomPanel, TCustomModule);
  RegisterComponents('MyTestComponents', [
    TMyPanel
  ]);
end;

我不希望安装和使用我的组件的人不小心在其中添加其他控件。 当组件的直接子时,如何防止控件被添加到组件中?

重现行为的步骤:

  1. 创建新表单
  2. 添加TMyPanel
  3. 选择TMyPanel时,添加其他控件
  4. 新控件将添加到面板中。

1 个答案:

答案 0 :(得分:4)

可能最简单的方法(可以覆盖)是在其构造函数中设置controlStyle元素,如下所示

interface

uses
  VCL.ExtCtrls,
  VCL.Controls,
  System.Classes;

type
TMyPanel = class(TCustomPanel)
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation

{ TMyPanel }

constructor TMyPanel.Create(AOwner: TComponent);
begin
  inherited;
  // ...
  ControlStyle := ControlStyle - [ csAcceptsControls ];
end;

如果您希望能够在设计时更改此行为,您还可以发布ControlStyle属性。