2011-12-17 3 views
0

Comment faire pour parcourir tous les contrôles d'un conteneur et tous les contrôles dans le conteneur d'un contrôle conteneur, et ainsi de suite.VB.NET Itérer dans les conteneurs de contrôle

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

Ce qui suit ne récupère que -Panel et aucun des autres contrôles

For Each cntrl As Control In Me.Controls 

Next 

Comment puis-je les récupérer tous dans une boucle For Each sans If/Then pour tous les niveaux de la pile?

EDIT:

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

Il en est ainsi loin la meilleure méthode que je trouve de le faire.

+0

C'est le meilleur que je trouve aussi. – dbasnett

Répondre

2

Vous devez définir une méthode permettant de traverser les conteneurs à l'intérieur du conteneur en recursively. Quelque chose comme ceci:

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 

Pour appeler cette méthode:

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

Je vois comment ça marche. Que pensez-vous de l'EDIT ci-dessus? – Theveloper

+0

GetNextControl renvoie les contrôles dans l'ordre des onglets. Que faire si un contrôle n'est pas dans l'ordre de tabulation, n'est pas activé (grisé) ou est invisible? L'approche récursive de AVD fonctionnera toujours. –

+0

Je comprends! Merci, pour les besoins de mon application, cependant, les contrôles désactivés/invisibles ne sont pas un problème. S'ils en deviennent un, j'utiliserai certainement l'approche d'AVD. – Theveloper

Questions connexes