Member 13138523 Ответов: 1

Измените backcolor текстовых полей, если они имеют определенный цвет


У меня есть 40 текстовых полей внутри панелей, разбросанных по 4 вкладкам в tabcontrol, мне нужно иметь возможность нажать кнопку my KennelStatus, и если пользователь изменил текстовое поле на оранжевый, то оно изменится на военно-морской флот.

Я попробовал прикрепленный код, который, как я думал, должен работать, но ничего не происходит. Может быть, это потому, что текстовые поля находятся в панелях??

Я знаю, что могу сделать каждое текстовое поле отдельно, и это работает, но должен быть более простой способ, чем писать его отдельно для 40 текстовых полей.
Любая помощь будет очень признательна

Диана

Что я уже пробовал:

Private Sub KennelStatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KennelStatus.Click

Dim a As Control

        For Each a In Me.TabControl1.Controls

            If TypeOf a Is TextBox Then
                If a.BackColor = Color.Orange Then
                    a.BackColor = SystemColors.CadetBlue
                End If

            End If


        Next

End Sub

Я знаю, что следующие работы для каждого текстового поля отдельно:
Private Sub KennelStatus_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KennelStatus.Click

If Kennel1StatusTbox.BackColor = Color.Orange Then
            Kennel1StatusTbox.BackColor = SystemColors.CadetBlue
        End If
End sub

1 Ответов

Рейтинг:
2

OriginalGriff

Если ваши текстовые поля находятся внутри любого другого элемента управления - а панель считается, - то "внешний элемент управления" действует как контейнер и имеет свою собственную отдельную коллекцию элементов управления, которую вам также нужно искать.
Самое простое решение - это просто рекурсия:

Private Sub ScanContainer(ByVal controls As Control.ControlCollection)
    For Each c As Control In controls
        If TypeOf c Is TextBox Then
            ...
        End If

        If c.Controls IsNot Nothing AndAlso c.Controls.Count > 0 Then
            ScanContainer(c.Controls)
        End If
    Next
End Sub