0

フォーム コンポーネントを列挙するのは非常に簡単です。

         for (int i=0;i<ComponentCount;i++)
         {
            ShowMessage(Components[i]->Name);
            //.....
         }

ただし、パネルにあるコンポーネントのみを列挙したい場合、同じことは機能しません。

         for (int i=0;i<Panel1->ComponentCount;i++)
         {
            ShowMessage(Panel1->Components[i]->Name);
            //.....
         }

なぜなら

            Panel1->ComponentCount;

パネルにいくつかのコンポーネントがある間はゼロです。では、Panel の子コンポーネントを列挙するにはどうすればよいでしょうか。

4

2 に答える 2

2

ComponentCountおよびプロパティは、コンポーネントの所有Components[]コンポーネントのリストにアクセスします。コンポーネントは、そのコンポーネントをコンストラクターに渡すことによって、そのコンポーネントが設定されています。設計時に作成されたすべてのコンポーネントには、親(またはまたは) が として設定されています。最初のループは、TForm が所有するコンポーネントを反復処理しているため、機能します。TPanel はコンポーネントを所有していないため、2 番目のループが失敗します。OwnerTFormTFrameTDataModuleOwner

あなたが探しているのは、代わりにControlCountandプロパティです。代わりに、ビジュアル コントロールの子Controls[]コントロールのリスト (視覚的な表現のために親コントロールが設定されているコントロール) にアクセスします。派生コントロール ( など) のみが子コントロールを持つことができます。ParentTWinControlTPanel

for (int i = 0; i < Panel1->ControlCount; ++i)
{
    ShowMessage(Panel1->Controls[i]->Name);
    //.....
}
于 2013-02-03T22:59:00.473 に答える