Проблема с проверкой типа пользовательского контроля - PullRequest
0 голосов
/ 23 октября 2018

У меня есть группа ComboBox, которые я хочу привязать к источнику данных.

Там будет более 200 ComboBox, связанных с одним и тем же источником, и поэтому я собираюсь сделать это с помощьюцикл, чтобы пройти через все элементы управления в форме, найти соответствующие элементы управления и выполнить связывание.

Вот код, который у меня есть на данный момент:

For Each uxControl As UserControl In Me.Controls
        If TypeOf (uxControl) Is ComboBox Then
            Dim tbControl As ComboBox = DirectCast(uxControl, ComboBox)
            If tbControl.Name.StartsWith("cmbDesk") Then
                tbControl.DataSource = myDS
                tbControl.DisplayMember = "employee_id"
                tbControl.ValueMember = "name"
            End If
        End If
    Next

В настоящее время нет другого кода, кромеиз SQL, чтобы заполнить DataSet.ComboBox находятся на закладке, поэтому в форме есть другие элементы управления.

В настоящий момент я получаю сообщение об ошибке:

Выражение типа 'System.Windows.Forms.UserControl 'никогда не может иметь тип' System.Windows.Forms.ComboBox '.

Любая помощь в решении этой проблемы.

1 Ответ

0 голосов
/ 23 октября 2018

Изменить

For Each uxControl As UserControl In Me.Controls

на

For Each uxControl As Control In Me.Controls

A UserControl предоставляет пустой элемент управления, который можно использовать для создания других элементов управления.

Как уже упоминалось в комментариях, вы также можете использовать LINQ, чтобы избавиться от строки
If TypeOf (uxControl) Is ComboBox Then и изменить петлю For Each следующим образом:

For Each comboBox As ComboBox In Me.Controls.OfType(Of ComboBox)
    If comboBox.Name.StartsWith("cmbDesk") Then
        comboBox.DataSource = myDS
        comboBox.DisplayMember = "employee_id"
        comboBox.ValueMember = "name"
    End If
Next
...