#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. Рад помочь 🙂