Member 11040029 Ответов: 1

Предварительная обработка для проверки события для элементов управления в форме windows


Я разрабатываю форму ввода данных.
Пользовательский интерфейс состоит из:
1. текстовое поле для имени пользователя
2. текстовое поле для пользовательского кода
3. ListView не показывает список существующих пользователей
4. кнопка для добавления нового пользователя

Теперь, обрабатывая событие проверки для 2 текстовых полей, я написал этот код:
void tb_Name_Validating(object sender, CancelEventArgs e)
{
  try
  {
    if(tb_Name.TextLength == 0)
      {
        tb_Code.Enabled = false;
        tb_Name.ForeColor = Color.White;
        tb_Name.BackColor = Color.PaleVioletRed;
        tb_Name.Focus();
      }
  }
  catch (Exception ex)
  {
    MessageBox.Show(ex.ToString());
  }
}


Я не разрешаю пользователю переходить к следующему элементу управления, если пользователь не предоставил значение для имени пользователя.

Теперь проблема возникает, когда фокус ввода все еще находится на tb_Name и пользователь нажимает на элемент в элементе управления listview.
Как только пользователь нажимает на элемент listview, запускается событие проверки для текстового поля tb_Name. И фокус снова остался на самом текстовом поле с ошибкой (изменение обратного цвета).

Я хочу обойти событие проверки. Но я не знаю, как сказать c#, что пользователь перешел к какому-то другому элементу управления, кроме tb_Code. Событие проверки должно происходить только тогда, когда пользователь пытается перейти к управлению tb_Code.

Любая помощь будет высоко оценена.
Спасибо!

Что я уже пробовал:

Я попытался пройти через порядок событий для Enter, Leave, GotFocus, LostFocus, validating и validated.
Кроме того, я перепробовал множество альтернатив, но ни одна из них не сработала идеально.

1 Ответов

Рейтинг:
2

OriginalGriff

Если вы хотите проверить только тогда, когда пользователь вводит tb_Code, то используйте tb_Code.Введите событие и переместите туда код проверки.


Member 11040029

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

OriginalGriff

И я цитирую: "событие проверки должно произойти только тогда, когда пользователь пытается перейти к управлению tb_Code."
Тогда скажи, что ты имеешь в виду. Мы не можем читать твои мысли! :смеяться:

Member 11040029

пользователь будет перемещаться в tb_Code только тогда, когда он покинет tb_Name... так что * Leaving* - это первый

OriginalGriff

Опять же, позвольте мне процитировать:
"когда фокус ввода все еще находится на tb_Name и пользователь нажимает на элемент в элементе управления listview.
Как только пользователь нажимает на элемент listview, запускается событие проверки для текстового поля tb_Name"
Когда ваш пользователь нажимает на listview, текстовое поле теряет фокус, и запускается событие проверки - не имеет значения, куда идет фокус, и это не должно иметь значения, потому что, как только он покинет текстовое поле, он может пойти куда угодно, включая ваш tb_Code. Если проверка не произошла,то он может ввести плохие значения, нажать на ListView, а затем нажать на tb_Code без проверки. Я бы предположил, что действие, которое вы совершаете в данный момент, отмечая его как ошибку и не позволяя ему покинуть текстовое поле, является правильным.