Как получить доступ к элементам управления многослойными панелями в vb.net

Я хочу получить доступ ко всем элементам управления в моей форме с помощью этого кода:

Для каждого ПК в Myform.control

делать что-то

Моя проблема в том, что у меня есть многослойные панели в myform. Например, "Myform" содержит (textbox1,textbox 2,combobox1,panle1,panel2).

Панель1 содержит (панель 11 и текстовое поле 3)

панель 2 содержит (панель 22 и текстовое поле 4 и выпадающий список 2)

Кроме того, панель 22 содержит (textbox5 и panle222)

Как получить доступ ко всем элементам управления (текстовое поле и поле со списком) в "Myform", не обращая внимания на то, находятся ли они на панели или нет.

Любая помощь с благодарностью.

2 ответа

Решение

Примерно так должно это сделать:

Private Sub EnumerateControl(parentControl As Control)
    For Each child As Control In parentControl.Controls
        Debug.WriteLine(child.Name)
        If child.HasChildren Then EnumerateControl(child)
    Next
End Sub

Затем вызовите это, чтобы использовать это:

EnumerateControl(Me) 'Pass the form control to start the enumeration

Ключевым моментом здесь является проверка наличия дочерних элементов в рассматриваемом элементе управления и перечисление всех элементов управления в этом элементе путем вызова EnumerateControl рекурсивно

Вы можете получить к ним доступ рекурсивным способом, таким как:

Public Sub ProcessControls(ByRef Controls As ControlCollection)
    For Each pc As Control In Controls
        'Do whathever you want

        If pc.Controls.Count Then 'If that control has child, process them
            ProcessControls(pc.Controls)
        End If
    Next
End Sub
Другие вопросы по тегам