为什么我的运行时创建的组件不会出现在表单上?

时间:2013-01-28 20:35:24

标签: delphi

我正在测试来自此Q& A Component Creation - Joining Components Together?的示例,以了解如何创建自定义/复合组件。

虽然示例中安装的组件可以拖动到表单上,但我似乎无法在运行时创建它。

procedure TForm1.Button1Click(Sender: TObject);
var
MyPanel2 : TMyPanel;
begin
MyPanel2 := TMyPanel.Create(Form1);
With MyPanel2 do
  begin
    Left := 10;
    Top := 10;
    Width := 400;
    Height := 400;
    Visible := True;
    Image.Picture.LoadFromFile('C:\test.png');
  end;
end;

我尝试将self和Form1作为所有者。使用面板和图像的属性。

不确定我做错了什么。没有错误,除非我忘记添加pngimage到我的用途。完成代码的步骤很好,运行时创建没有任何可视化。

1 个答案:

答案 0 :(得分:7)

您需要在运行时代码中设置Parent

MyPanel2 := TMyPanel.Create(Self);
with MyPanel2 do
begin
  Parent := Self;//oops, you forgot to set this
  SetBounds(10, 10, 400, 400);
  Image.Picture.LoadFromFile('C:\test.png');
end;

您问题中的代码不会导致控件显示普通的香草TPanel,或者实际上是任何控件。

来自documentation,强调:

  

指定控件的父级。

     

使用Parent属性获取或设置控件的父级。该   控件的父级是包含它的控件。例如,如果   应用程序包括组框中的三个单选按钮   box是三个单选按钮和单选按钮的父级   是组框的子控件。

     

要作为父级,控件必须是TWinControl的实例   后代。

     

在运行时创建新控件时,请指定Parent属性   新控件的值。通常,这是一个表单,面板,组合框,   或旨在包含另一个的控件。改变父母   控件在屏幕上移动控件以便在其中显示   新的父母。当父控件移动时,孩子移动   父母。