Accès à un contrôle qui se trouve dans 1 à plusieurs containers
2 réponses
Bonjour,
Dans un module public où je passe en paramètre la Form appelante, je connais
le nom du contrôle que je cherche (ex : TextBox_Nom).
Ce contrôle se trouve dans 1 à plusieurs contrôle containers
(TableLayoutPanel, TabControl et GroupBox) mais le chemin pour accéder à
chaque contrôle cherché n'est pas toujours le même.
Ex :
Dim tb_nom As TextBox =
CType(Form_Appelante..Controls("TableLayoutPanel_Racine").Controls("GroupBox_Niveau_1").Controls("TextBox_Nom"),
TextBox )
Dim cb_niveau As ComboBox =
CType(Form_Appelante.Controls("TableLayoutPanel_Racine").Controls("TabControl_Description").Controls("TableLayoutPanel_Page_1").Controls("GroupBox_Niveau_2").Controls("ComboBox_Niveau"),
ComboBox)
Cette méthode d'accès fonctionne, mais je trouve que c'est long pour chaque
contrôle.
Je préfèrerais si c'est possible une fonction récursive qui trouverait le
contrôle cherché.
J'ai essayé ceci, mais sans succès :
Dim test_cb_niveau As ComboBox = cherche_cb(Form_Appelante,
"ComboBox_Niveau")
Function cherche_cb(ByVal c As ContainerControl, ByVal cb As String) As
ComboBox
For Each ctrl As Control In c.Controls
If ctrl.Name = cb Then
Return CType(ctrl, ComboBox)
Else
If ctrl.GetType.ToString = "System.Windows.Forms.TableLayoutPanel" OrElse _
L'exception System.InvalidCastException n'a pas été gérée
Message="Impossible d'effectuer un cast d'un objet de type
'System.Windows.Forms.TableLayoutPanel' en type
'System.Windows.Forms.ContainerControl'."
Existe-t-il une méthode qui me permettrait de trouver la solution à mon
problème ? (sinon, je garde l'ancienne méthode)