2011-12-17 4 views
0

コンテナ内のすべてのコントロールとコントロールを含むコンテナ内のすべてのコントロールをループする方法を教えてください。VB.NETコントロールコンテナを反復する

Form 
-Panel 
--Control 
--Tab 
----Control 
----Control 
--Tab 
----Control 

次は-Panelを取得し、他のコントロールのいずれ

For Each cntrl As Control In Me.Controls 

Next 

は、どのように私は、スタック内のすべてのレベルのために続いた場合/なしFor Eachループでそれらのすべてを取得することはできませんか?

EDIT:

Dim ctl As Control = Me 
Do 
    ctl = Me.GetNextControl(ctl, True) 
    'Do whatever you have to ctl 
Loop Until ctl Is Nothing 

これは、これまでのところ、私はこれを行うための発見された最良の方法です。

+0

私も発見したベストです:

Dim _list As New List(Of Control) Public Sub GetChilds(container As Control) For Each child As Control In container.Controls _list.Add(child) If (child.HasChildren) Then GetChilds(child) End If Next End Sub 

は、このメソッドを呼び出します。 – dbasnett

答えて

2

recursivelyコンテナ内のコンテナをトラバースするメソッドを定義する必要があります。このような何か:

list=new List(Of Control) 
    GetChilds(Me) 
    For Each cntrl As Control In _list 
    .... 
    Next 
+0

私はどのように作品を参照してください。上記のEDITについてどう思いますか? – Theveloper

+0

GetNextControlは、タブオーダーのコントロールを返します。コントロールがタブ順でない、有効になっていない(グレーで表示されている)、または表示されていない場合はどうなりますか? AVDの再帰的アプローチは常に機能します。 –

+0

私は理解しています!ありがとう、私のアプリケーションの目的のために、無効/不可視のコントロールは問題ではありません。それらが1になるなら、私はAVDのアプローチを間違いなく使用します。 – Theveloper