4

我正在测试来自此问答组件创建的示例 - 将组件连接在一起?了解如何创建自定义/复合组件。

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

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 添加到我的用途中。单步执行代码就好了,运行时创建在视觉上没有发生任何事情。

4

1 回答 1

8

您需要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;

您问题中的代码不会导致显示普通 vanillaTPanel或任何控件的控件。

文档中,我强调:

指定控件的父级。

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

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

在运行时创建新控件时,为新控件分配 Parent 属性值。通常,这是一个窗体、面板、组框或旨在包含另一个控件的控件。更改控件的父级会在屏幕上移动控件,以便它显示在新的父级中。当父控件移动时,子控件与父控件一起移动。

于 2013-01-28T20:38:36.743 回答