Как установить 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