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

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

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