0

フォームに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設計時に配置される親パネルです。

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 に答える