2015-03-04 2 views
0

Я разрабатываю форму окна, в которой содержится столько элементов управления. Я хочу изменить цвет заднего фона этого активного элемента управления на Focus & обратно к своему первоначальному цвету, когда он потерял фокус. Я вижу This Ссылка, которая дает решение для написания кода для каждого элемента управления в форме. - любое решение для написания общей функции, которая находит текущий активный элемент управления в форме &, меняет цвет.Как изменить backcolor управления на фокусе

+0

Реализовать обработчик событий и изменить цвет элемента управления. вы можете назначить этот обработчик событий более чем одному элементу управления. я рекомендую реализовать Got и LostFocus (или, тем не менее, это называется) Eventhandler – Jens

ответ

2

В виде конструктора можно назначить GotFocus и LostFocus обработчиков событий для каждого элемента управления вашей формы, как это:

foreach (Control ctrl in this.Controls) 
{ 
    ctrl.GotFocus += ctrl_GotFocus; 
    ctrl.LostFocus += ctrl_LostFocus; 
} 

А потом в методе обработчиков сделать некоторые логики вокруг сосредоточены BackColor элемента управления (например, на GotFocus сохранить ток BackColor в теге элемента управления, а затем установить BackColor к красному, на LostFocus восстановить первоначальный BackColor из тега элемента управления):

void ctrl_LostFocus(object sender, EventArgs e) 
{ 
    var ctrl = sender as Control; 
    if (ctrl.Tag is Color) 
     ctrl.BackColor = (Color)ctrl.Tag; 
} 

void ctrl_GotFocus(object sender, EventArgs e) 
{ 
    var ctrl = sender as Control; 
    ctrl.Tag = ctrl.BackColor; 
    ctrl.BackColor = Color.Red; 
} 
0

Я пишу метод расширения и использовать так:

this.textBox1.HookFocusChangeBackColor(Color.Blue); 

Способ выдвижение:

public static class ControlExtension 
{ 
    public static void HookFocusChangeBackColor(this Control ctrl, Color focusBackColor) 
    { 
     var originalColor = ctrl.BackColor; 
     var gotFocusHandler = new EventHandler((sender, e) => 
     { 
      (ctrl as Control).BackColor = focusBackColor; 
     }); 
     var lostFocusHandler = new EventHandler((sender, e) => 
     { 
      (ctrl as Control).BackColor = originalColor; 
     }); 

     ctrl.GotFocus -= gotFocusHandler; 
     ctrl.GotFocus += gotFocusHandler; 

     ctrl.LostFocus -= lostFocusHandler; 
     ctrl.LostFocus += lostFocusHandler; 
    } 
}