创建自定义控件。我必须给他们起个名字吗?

时间:2018-11-13 10:13:49

标签: delphi

比方说,我从TPanel创建并安装了自己的控件。它仅包含一个按钮:

constructor TMyPanel.Create(aOwner: TComponent);
begin
 inherited Create(aOwner);

 btn:= TButton.Create(Self);
 btn.Parent:= Self;   
 btn.Name:= 'xxx';      <-------- mandatory?
end;

是否必须为该面板命名?


此问题从dummzeuch在此处发布的评论开始:

  

这种情况发生在您的标签没有名字的时候。 IDE添加   仅当控件具有名称时才向类声明(否则   应该声明吗?)。

What does a EClassNotFound raised at runtime really mean when the class in question is there at compile and link time, and there explicitly in code?

(我仅指该评论)

2 个答案:

答案 0 :(得分:3)

否,您无需命名子组件。

但是,如果您打算将对子组件的访问权限公开为在DFM中流式传输的属性,则确实需要标记子组件,至少:

constructor TMyPanel.Create(aOwner: TComponent);
begin
  inherited Create(aOwner);
  btn := TButton.Create(Self);
  btn.Parent := Self;
  btn.SetSubComponent(True); // <-- ADD THIS
end;

答案 1 :(得分:2)

IDE需要组件具有名称,否则则没有名称。因此,如果IDE不直接访问子组件的任何属性,则不需要名称。这不会阻止父级设置的组件属性,例如通过IDE可见的父级属性。