Создайте класс (например, ControlColorizer) и в его конструкторе передайте:
1) Цвет фона для «активного управления» и сохранение во внутренней переменной цвета
2) управляющий массив переменной длины
В конструкторе добавьте один и тот же обработчик событий для OnEnter и OnLeave для каждого элемента управления
В событии OnEnter установите фоновый цвет
В событии OnLeave установить стандартный цвет фона
Преимущество всего в использовании класса:
1) Объявите глобальный экземпляр в вашем классе формы
2) Инициализируйте в конструкторе формы после InitializeComponent.
3) Забудь обо всем остальном. Никакого другого кода не требуется
Итак, позвольте мне объяснить все с помощью кода:
Это будет в файле с именем ControlColorizer.cs
public class ControlColorizer
{
private Color _setBColor = SystemColors.Window;
public ControlColor(Color bkg, params Control[] ctls)
{
_setBColor = bkg;
foreach (Control o in ctls)
{
o.Enter += new EventHandler(o_Enter);
o.Leave += new EventHandler(o_Leave);
}
}
private void o_Enter(object sender, EventArgs e)
{
if (sender is Control)
{
Control c = (Control)sender;
c.BackColor = _setBColor;
}
}
private void o_Leave(object sender, EventArgs e)
{
Control c = sender as Control;
c.BackColor = SystemColors.Window;
}
Теперь, в каждом конструкторе форм, где вам нужна функциональность, у вас есть этот
ControlColirizer _ccz;
public Form1()
{
InitializeComponent();
// Create an instance of ControlColorizer, pass the background color
// the list of Controls and that's all
_ccz = new ControlColorizer(Color.LightYellow, this.TextBox1,
this.TextBox2, this.TextBox3, this.TextBox4);
}