У меня есть стандартный элемент управления TextBox, который я пытаюсь имитировать «мягкими описаниями», подобными тем, которые находятся в полях заголовка и тегов в StackOverflow. По сути, когда фокус пользователя попадает в элемент управления, он в этом случае скрывает описание («Имя пользователя») и устанавливает выравнивание и цвет в соответствии со стандартным текстовым элементом управления. Когда пользователь покидает текстовое поле, я хочу проверить, действительно ли пользователь что-либо ввел, и в противном случае вернуть отображение имени пользователя.
Например:
private void tbUsername_Enter(object sender, EventArgs e)
{
if (tbUsername.TextAlign == HorizontalAlignment.Center)
{
tbUsername.TextAlign = HorizontalAlignment.Left;
tbUsername.ForeColor = SystemColors.ControlText;
tbUsername.Text = String.Empty;
}
}
private void tbUsername_Leave(object sender, EventArgs e)
{
if (tbUsername.Text == String.Empty)
{
tbUsername.TextAlign = HorizontalAlignment.Center;
tbUsername.ForeColor = SystemColors.InactiveCaption;
tbUsername.Text = "Username";
}
}
К сожалению, когда я настраиваю эти события, пользователь не может выйти из-под контроля имени пользователя. Элемент управления просто мигает, и элемент управления возвращается к самому элементу управления текстового поля, пока пользователь не введет что-либо, пропуская тело события.
Если я вызываю this.SelectNextControl()
в событии, то событие входит в бесконечный цикл.
Кто-нибудь видит, что я делаю не так?