2011-12-17 3 views
0

Как мне пройти через все элементы управления в контейнере и все элементы управления в контейнере содержащего элемента управления и т. Д.VB.NET Итерация через контейнеры управления

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

Следующая только не извлекает -ПЕРЕВОРОТНЫЕ и ни один из других элементов управления

For Each cntrl As Control In Me.Controls 

Next 

Как я могу получить их все для каждого цикла без Условный/Тогда для каждого уровня в стеке?

EDIT:

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

Это до сих пор самый лучший метод, который я нашел в этом.

+0

Это лучшее, что я нашел также. – dbasnett

ответ

2

Вы должны определить метод, который recursively перемещает контейнеры внутри контейнера. Что-то вроде этого:

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 

Для вызова этого метода:

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

Я вижу, как работают. Что вы думаете об EDIT выше? – Theveloper

+0

GetNextControl возвращает элементы управления, которые находятся в порядке вкладок. Что делать, если элемент управления не находится в порядке табуляции, не включен (выделен серым) или невидим? Рекурсивный подход AVD всегда будет работать. –

+0

Я понимаю! Спасибо, для целей моего приложения, однако, отключенные/невидимые элементы управления не являются проблемой. Если они станут единым, я обязательно использую подход AVD. – Theveloper

Смежные вопросы