0

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

我错误地删除了主面板。然后将其作为新控件放回去。

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

有没有办法解决这个问题?我似乎找不到组件的 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是在设计时放置的父面板。

4

1 回答 1

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 作为父级,导致它们不显示。

于 2012-10-31T06:35:52.950 回答