2015-01-06 3 views
0

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

+0

Вы имеете в виду неактивное, как не сфокусированное или включенное = false? – Monah

ответ

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 
+0

Недостаточно просто добавить обработчики событий для событий 'Enter' и' Leave' для элементов управления, которые мы хотим, без получения элементов управления и без 'FindControl'? В конструкторе, например, – Fabio

+0

Конечно. Это склонный к ошибкам способ. –

+0

Извините, почему он подвержен ошибкам. Какие недостатки этим способом (за исключением одного: нужно добавить обработчики событий для каждой формы в проекте, если вы хотите одинакового поведения во всех формах)). – Fabio

Смежные вопросы