表格上有一个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
是在设计时放置的父面板。
答案 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作为父级,导致它们不显示。