Выделение текстового поля щелчком мыши ИЛИ нажатием клавиши tab в C # Windows Form

#c# #winforms #loops #event-handling

#c# #winforms #циклы #обработка событий

Вопрос:

Я пытаюсь выделить активное текстовое поле в своей форме желтым цветом. У меня всего 60 текстовых полей. Поэтому моя идея заключается в том, что когда пользователь нажимает на текстовое поле, цвет фона должен стать желтым, или если пользователь нажимает tab, любое текстовое поле, к которому оно переходит, также должно измениться на желтый. У меня работает щелчок мыши, но я не могу заставить нажатие клавиши табуляции войти в текстовое поле для работы. Мне действительно нужен ввод клавиши табуляции в текстовое поле, чтобы работать, поскольку у меня мои индексы вкладок выстроены идеально, поэтому существует естественный поток. Это текущий код, который у меня есть, который работает для выделения текстовых полей щелчком мыши по нужному текстовому полю (при вводе события):

 private void tbAll_Enter(object sender, EventArgs e)
{
    foreach (Control tb in this.Controls)
    {
        if (tb is TextBox)
        {
            if (tb.Focused == true)
            {
            ((TextBox)tb).BackColor = System.Drawing.Color.Yellow;
            }
        }
    }
}
  

Однако, если я нажимаю tab, чтобы перейти в текстовое поле, оно не выделяется желтым, НО вместо этого предыдущее поле, которое я только что оставил, выделяется желтым. Кто-нибудь знает причину и способ решения этой проблемы?

Ответ №1:

Использовать Enter и Leave события — привязать все текстовые поля к одним и тем же обработчикам событий для Enter и Leave и использовать Sender аргумент для изменения цвета фона на желтый / белый (в зависимости от события).

Что-то вроде этого должно помочь вам начать:

 private void TextBox_Enter(Object sender, EventArgs e) 
{
   ((TextBox)sender).BackColor = Color.Yellow;
}

private void TextBox_Leave(Object sender, EventArgs e) 
{
   ((TextBox)sender).BackColor = Color.White;
}
  

Таким образом, не имеет значения, ввел ли пользователь текстовое поле щелчком мыши или нажатием кнопки tab — как только текстовое поле сфокусировано, оно получит желтый фон, и как только другой элемент управления получит фокус, он снова станет белым.

Комментарии:

1. Отличная идея. Это работает идеально, не думал использовать объект sender, который намного проще / практичнее, чем цикл for. Спасибо!

2. Рад помочь 🙂