Как очистить первую клавишу, нажмите сразу после короткого диалогового окна, если это неправильная запись в текстовом поле - PullRequest
0 голосов
/ 24 сентября 2019

Я проверяю идентификатор пользователя в текстовом поле.И он не может начинаться с буквы или цифры «0».Я могу поймать неправильную запись и отправить сообщение на экран.Но неправильная запись будет в текстовом поле, пока я не нажму другую клавишу.И если это допустимая цифра, то неправильная запись остается в начале строки.Поэтому мне нужно избавиться от неправильной записи сразу после диалогового окна сообщения.Любое предложение?

  private void TxtUserID_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
        {

            MessageBox.Show(" Your User ID can not begin with a letter !!!");
            //txtUserID.Text = string.Empty;
            txtUserID.Clear();
        }
        else if (e.KeyChar == '0')
        {
            MessageBox.Show("Your User ID can not begin with 0 !!!");

            txtUserID.Text = string.Empty;
        }
    }// end of keypress

1 Ответ

1 голос
/ 24 сентября 2019

Я предлагаю использовать TextChanged вместо KeyPress событие: независимо от того, изменилось TxtUserID.Text (например, Вставить , или, представьте, пользователь положил "12340", а затем удалено "1234" для получения "0") проверить TxtUserID

private static bool IsNameValid(string name) {
  if (string.IsNullOrEmpty(name))
    return true;
  else if (name.Any(c => c < '0' || c > '9')) {
    MessageBox.Show("Your User ID must contain digits only!");

    return false;
  }
  else if (name.StartsWith("0")) {
    MessageBox.Show("Your User ID must not start from 0!");

    return false;
  }

  return true;
}

private void TxtUserID_TextChanged(object sender, EventArgs e) {
  if (!IsNameValid(TxtUserID.Text))
    txtUserID.Clear(); // Taken from the question
}

Редактировать: Как Томас Вос указал, очистка весь текст может быть жестоким для пользователя (представьте, что он напечатал "1001234566978563", а затем решил удалить начальный "100"), вероятно

    txtUserID.Text = string.Concat(txtUserID
      .Text
      .Where(c => c >= '0' && c <= '9') // Digits only
      .SkipWhile(c => c == '0'));       // Trim all starting '0'

вместо txtUserID.Clear(); когда мы удаляем все символы, кроме цифр и обреза, ведем 0 - лучший выбор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...