コントロールコレクションから特定タイプのコントロール群を再帰的に抽出する。

コントロールが所有するコレクションから指定した型のコントロール群を取得するロジックです。

Parentにコントロール群を所有するコントロールを渡し,typeに取得したいコントロールの型情報を渡します。

戻り値は、取得した結果でObject配列になっています。

ちなみに、VB.NETで記述してあります。

001     Public Shared Function GetControls(ByVal Parent As Control, ByVal type As System.Type) As Object()
002         Dim objControl As Control
003         Dim tmpControl As Control
004         Dim objList As New Collections.Stack
005         Dim objControls() As Object
006 
007         '検索
008         For Each objControl In Parent.Controls
009             '現在の要素が指定の型であれば、スタックに登録
010             If objControl.GetType() Is type Then
011                 objList.Push(objControl)
012             End If
013             '現在の要素が子を持っていたら再帰呼び出し
014             If objControl.Controls.Count > 0 Then
015                 objControls = GetControls(objControl, type)
016                 '再帰呼び出しした結果コントロールリストを持っていればスタックに登録
017                 If Not objControls Is Nothing Then
018                     For Each tmpControl In objControls
019                         objList.Push(tmpControl)
020                     Next
021                     objControls = Nothing
022                 End If
023             End If
024         Next
025         '返す
026         objControls = objList.ToArray()
027         Return objControls
028     End Function
029 

Share