【问题标题】:How to disable child controls at design-time?如何在设计时禁用子控件?
【发布时间】:2012-06-26 14:23:53
【问题描述】:

我有自己的控制权,源自TCustomPanel。它上面有一个孩子 (TEdit)。

type
  TMyControl = class(TCustomPanel)
  private
    FEditor: TEdit;
  public
    constructor Create(AOwner: TComponent);
    destructor Destroy(); override;
  end;

  constructor TMyControl.Create(AOwner: TComponent);
  begin
    FEditor := TEdit.Create(nil);
    FEditor.Parent := Self;
  end;

  destructor TMyControl.Destroy(); 
  begin
    FEditor.Free();
  end;

当我在设计时单击子控件时,它充当运行时TEdit,捕获焦点。

如何在设计时完全禁用子控件?

我希望他们停止回复鼠标/键盘消息。当我在设计时单击它们时,我希望选择并拖动父控件。

【问题讨论】:

  • 可以拖到它的父对象里面吗?如果不是,那不是设计师给你带来麻烦。尝试在设计时禁用编辑。
  • @GolezTrol 是的,当禁用儿童控制时,一切正常。但是,外观不同(灰色)。

标签: delphi controls design-time


【解决方案1】:

在编辑构造函数中使用Self 作为所有者,以制作面板的编辑子组件并让面板处理其销毁。并调用SetSubComponent 函数并将每个子组件的IsSubComponent 参数设置为True,以将您的面板控件视为结构窗格中的一个。

constructor TMyControl.Create(AOwner: TComponent);
begin
  ...
  FEditor := TEdit.Create(Self);
  FEditor.SetSubComponent(True);
  FEditor.Parent := Self;
  ...
end;

【讨论】:

  • 好的,谢谢!但是,即使没有SetSubComponent(True);,它也可以工作,也许没有必要?
  • 是的,但SetSubComponent 会导致您将面板始终视为Structure 面板中的一个控件。讨论了here
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
相关资源
最近更新 更多