Как установить BackColor неактивного контроля

У меня есть форма, которая содержит несколько текстовых и комбинированных списков. Я установил свойство back color активного элемента управления в skyblue. Я хочу установить задний цвет всех текстовых полей и комбинированных списков на белый, пока они не активны.

1 ответ

Есть правильный путь и неправильный способ сделать это. Вы просите неправильный путь. Правильный способ - извлечь собственный класс из TextBox и переопределить методы OnEnter и OnLeave. Повторите для ComboBox.

Но вы просите неверный путь и, вероятно, пытаетесь добавить эту функцию слишком поздно, поэтому нам придется отбросить ее, найдя элементы управления во время выполнения. Добавьте конструктор в свой класс формы и сделайте так, чтобы он выглядел следующим образом:

Public Sub New()
    InitializeComponent()
    FindControls(Me.Controls)
End Sub

Private Sub FindControls(ctls As Control.ControlCollection)
    For Each ctl As Control In ctls
        Dim match As Boolean
        If TypeOf ctl Is TextBoxBase Then match = True
        If TypeOf ctl Is ComboBox Then
            Dim combo = DirectCast(ctl, ComboBox)
            If combo.DropDownStyle <> ComboBoxStyle.DropDownList Then match = True
        End If
        If match Then
            AddHandler ctl.Enter, AddressOf ControlEnter
            AddHandler ctl.Leave, AddressOf ControlLeave
        End If
        FindControls(ctl.Controls)
    Next
End Sub

Private controlColor As Color

Private Sub ControlEnter(sender As Object, e As EventArgs)
    Dim ctl = DirectCast(sender, Control)
    controlColor = ctl.BackColor
    ctl.BackColor = Color.AliceBlue
End Sub

Private Sub ControlLeave(sender As Object, e As EventArgs)
    Dim ctl = DirectCast(sender, Control)
    ctl.BackColor = controlColor
End Sub
Другие вопросы по тегам