FMX.Controls.TControl.EnumControls
Delphi
procedure EnumControls(const Proc: TFunc<TControl, TEnumControlsResult>); overload;
function EnumControls(Proc: TEnumControlsRef; const VisibleOnly: Boolean = True): Boolean; overload;
C++
void __fastcall EnumControls(const System::DelphiInterface<System::Sysutils::TFunc__2<TControl*,Fmx::Types::TEnumProcResult> > Proc)/* overload */;
bool __fastcall EnumControls _DEPRECATED_ATTRIBUTE1("Use another version of EnumControls") (_di_TEnumControlsRef Proc, const bool VisibleOnly = true)/* overload */;
プロパティ
| 種類 | 可視性 | ソース | ユニット | 親 | 
|---|---|---|---|---|
| procedure function | public | FMX.Controls.pas FMX.Controls.hpp | FMX.Controls | TControl | 
説明
このコントロールの子であるコントロールについて反復処理を行い、指定された手続きをコントロールごとに 1 回実行します。その際、各呼び出しの第 1 パラメータには異なるコントロールが指定されます。
- 警告: 関数の EnumControls は非推奨です。手続きの方を使用してください。このページでは、EnumControls 手続きの構文と使い方を説明します。
EnumControls では、深さ優先探索アルゴリズムを使用して、このコントロールの直接の子だけでなく、それらの子(孫)などについても反復処理を行います。
EnumControls は、探索中にコントロールを発見するたびに Proc 手続きを実行します。この手続きは、発見されたコントロールを引数として受け取り、型が TEnumControlsResult の値を返します。この戻り値によって、EnumControls が次に何を行うかが決まります。次の値のいずれかを返すことができます。
- Continue: EnumControls では通常どおりコントロールの探索が続けられます。
- Discard: 現在のコントロール(第 1 パラメータのコントロール)の子およびその子(孫)などの探索をスキップします。
- Stop: 探索ループを中断します。EnumControls が言語レベルの制御ループであれば、Stop は Break キーワードになります。
例
以下の例では、EnumControls を呼び出してパネル(Panel1)の子に対して反復処理を行い、表示されるすべてのコントロールを含むリスト(ListOfVisibleControls)を作成しています。
Delphi の場合:
 Panel1.EnumControls(function (Control: TControl): TEnumControlsResult
   begin
     if not Control.Visible then
       Result := TEnumControlsResult.Discard
     else
       begin
         ListOfVisibleControls.Add(Control);
         Result := TEnumControlsResult.Continue;
       end;
   end);
C++ の場合:
- 1. TFunc__2 インターフェイスを実装するクラスを定義します。
 class TMethodReference : public TCppInterfacedObject<TFunc__2<TControl*,TEnumControlsResult> >
 {
 public:
     TEnumControlsResult __fastcall Invoke(TControl* Control)
     {
         if (!Control->Visible)
             return TEnumControlsResult::Discard;
         else {
             TForm2::ListOfVisibleControls->Add(Control);
             return TEnumControlsResult::Continue;
         }
     }
 };
- 2. その後、このクラスのインスタンスを EnumControls に渡します。
 Panel1->EnumControls(new TMethodReference);