freepascal / delphi组件没有出现(我认为z-order问题)

时间:2012-10-31 06:25:19

标签: delphi freepascal lazarus z-order

表格上有一个PANEL。然后动态地创建更多面板并将它们放在表单上看起来像菜单。

我错误地删除了主PANEL。然后把它作为一个新的控件。

现在动态按钮不显示。但是没有错误。所以我猜测动态组件在那里但不可见(在主PANEL后面)。

有没有办法解决这个问题?我似乎找不到组件的z顺序属性。

请帮忙。

以下是代码段:

  For MenuItemCount:= 1 to MenuItemLimit Do
      Begin
      MenuButtons[MenuItemCount] := TPanel.Create(Self);
      With MenuButtons[MenuItemCount] do
          begin

            Width:=180 - (10*MenuItem[MenuItemCount].Level);
            Left:=4+10*MenuItem[MenuItemCount].Level;

            Height:=25;
            Top:= 5 + Height * (MenuItemCount-1);
            Color:= clMenu;
            Cursor:=crHandPoint;

            Parent := MenuGroup; //Parent container for the items.

            Caption := MenuItem[MenuItemCount].Title;

      end;//End for

MenuGroup是在设计时放置的父面板。

1 个答案:

答案 0 :(得分:2)

方法SendToBack允许您将控件发送到后面(及其BringToFront对应方)。

但我认为这不会解决你的问题。默认情况下,组件的“Z顺序”是它们的创建顺序。设计时间面板是在动态面板之前创建的,即使您已将其移除并在表单上放置一个新面板。

我认为发生了什么(虽然没有看到你的代码,这是一个很难猜测的),是你试图按名称找到面板,如下所示:

var
  ParentPanel: TPanel;
  DynamicPanel: TPanel;
begin
  ParentPanel := FindComponent('PanelX') as TPanel;

  DynamicPanel := TPanel.Create(Self);
  DynamicPanel.Parent := ParentPanel;

这样可行,但是如果你删除了PanelX,并放入一个名称略有不同的新面板,FindComponent将找不到面板并返回nil。 DynamicPanels将为nil作为父级,导致它们不显示。