【问题标题】:Control has no parent window控件没有父窗口
【发布时间】:2016-12-20 08:01:32
【问题描述】:

我查看了许多类似标题的主题,但都没有帮助。

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

谁能解释一下原因?

__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 行,一切正常,那么大概是问题所在?

【问题讨论】:

标签: delphi c++builder


【解决方案1】:

分配 ToolButton 的 Parent 需要 ToolBar 具有已分配的 HWND,这要求它具有 Parent 和已分配的 HWND,依此类推。但是您的 EditBox 在调用其构造函数时尚未分配 Parent(或 Name),因此 ToolBar 无法分配 HWND,因此出现错误。

如果你希望你的 Toolbar 在运行时有一个默认按钮,你需要将按钮的创建移动到 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;
}

【讨论】:

  • 谢谢雷米。我去了 SetParent 路线,所以按钮(实际代码有几个)在设计时显示。
猜你喜欢
  • 2011-04-16
  • 2014-06-12
  • 2019-06-12
  • 2013-08-27
  • 1970-01-01
  • 2012-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多