控件没有 parent window

Control has no parent window

我查看了很多标题相似的话题,但都没有帮助。

以下编译并安装到组件选项板,但是当我尝试将组件添加到面板时,我收到线程标题中提到的错误消息。

谁能解释一下为什么?

__fastcall TEditBox::TEditBox(TComponent* Owner) : TGroupBox(Owner)
{
    ToolBar=new TToolBar(this);
    ToolBar->Parent=this;
    TToolButton *Btn=new TToolButton(ToolBar);
    Btn->Parent=ToolBar;
}

如果我省略 Btn->Parent=ToolBar 行,一切正常,所以大概是问题所在?

分配一个 ToolButton 的 Parent 需要 ToolBar 有一个分配的 HWND,这需要它有一个 Parent 和一个分配的 HWND,依此类推。但是你的 EditBox 在调用它的构造函数时还没有分配 Parent(或 Name),所以 ToolBar 还不能分配 HWND,因此错误。

如果你想让你的工具栏在运行时有一个默认按钮,你需要将按钮的创建移动到EditBox的虚拟Loaded()方法(甚至SetParent()方法),例如:

__fastcall TEditBox::TEditBox(TComponent* Owner)
    : TGroupBox(Owner)
{
    ToolBar=new TToolBar(this);
    ToolBar->Parent=this;
}

void __fastcall TEditBox::Loaded()
{
    TGroupBox::Loaded();
    TToolButton *Btn=new TToolButton(ToolBar);
    Btn->Parent=ToolBar;
}