Автоматическая инициализация элементов управления - PullRequest
0 голосов
/ 18 марта 2019

Я создал пользовательский элемент управления, который нужно инициализировать.На самом деле у меня есть эта функция для инициализации моего пользовательского элемента управления (называемая «UserControl_Grille»):

 Private Sub Init_Grille()
    Me.grilleA.init_traduction(lignesTraduction)
    Me.grilleB.init_traduction(lignesTraduction)
    Me.grilleC.init_traduction(lignesTraduction)
    Me.grilleD.init_traduction(lignesTraduction)
    Me.grilleE.init_traduction(lignesTraduction)
    Me.grilleF.init_traduction(lignesTraduction)
    Me.grilleG.init_traduction(lignesTraduction)
    Me.grilleH.init_traduction(lignesTraduction)
End Sub

Как вы можете видеть, это не очень стоит, так как если добавить новый элемент управления, я должен добавить его в эту функцию.

Итак, я попытался инициализировать автоматически, но, похоже, он не обнаружил никакого пользовательского элемента управления в моей форме ...:

Private Sub Init_Grille()
    For Each grille As UserControl_Grille In Me.Controls.OfType(Of UserControl_Grille)()
        grille.init_traduction(lignesTraduction)
    Next
End Sub

В режиме отладки он напрямую проходит черезДля каждой петли.Есть другое решение?

1 Ответ

1 голос
/ 18 марта 2019

Вы можете рекурсивно прокручивать все элементы управления.

Например, этот пример кода вернет список всех ярлыков в вашей форме:

    Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        ' This list will hold all the labels that we find
        Dim results As List(Of Control) = New List(Of Control)

        ' Start searching for labels at the Form level 
        FindControls(Me, results)

        ' See how many labels we have found
        MessageBox.Show(results.Count)

    End Sub

    Private Sub FindControls(parent As Control, ByRef results As List(Of Control))
        For Each control As Control In parent.Controls

            If TypeOf control Is Label Then
                ' We found a label so we add it to the results
                results.Add(control)
            End If

            If Not control.Controls Is Nothing Then
                ' We loop through all sub-controls
                FindControls(control, results)
            End If
        Next
    End Sub
End Class

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...