Форма приложения Windows не может нажать любую клавишу из-за выбранной кнопки [дублировать]

Вы можете использовать Regex для проверки вашей проверки силы пароля

^(?=.*[A-Z].*[A-Z])(?=.*[!@#$&*])(?=.*[0-9].*[0-9])(?=.*[a-z].*[a-z].*[a-z]).{8}$

Regex Пояснение: -

^                         Start anchor
(?=.*[A-Z].*[A-Z])        Ensure string has two uppercase letters.
(?=.*[!@#$&*])            Ensure string has one special case letter.
(?=.*[0-9].*[0-9])        Ensure string has two digits.
(?=.*[a-z].*[a-z].*[a-z]) Ensure string has three lowercase letters.
.{8}                      Ensure string is of length 8.
$                         End anchor.

Источник - Rublar Link

48
задан BoltClock 25 May 2012 в 13:45
поделиться

3 ответа

У вашей формы есть свойство KeyPreview, установленное в true?

Form.KeyPreview Свойство

Получает или задает значение, указывающее, будет ли форма получать ключевые события перед событием передается в элемент управления с фокусом.

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.keypreview.aspx

119
ответ дан jeffgabhart 27 August 2018 в 01:08
поделиться

Наиболее распространенный совет по этой проблеме в StackOverflow и MSDN 1 , 2 (включая принятый ответ здесь) является быстрым и легким:

События

KeyDown запускаются на Form, пока его свойство KeyPreview установлено на true

. Это подходит для большинства целей, но это рискованно по двум причинам:

  1. KeyDown обработчики не видят всех клавиш . В частности, «вы не можете видеть типы нажатий клавиш, которые используются для навигации. Подобно клавишам курсора, Tab, Escape и Enter для диалога».
  2. Существует несколько способов перехвата ключевых событий , и все они происходят последовательно. KeyDown обрабатывается последним . Следовательно, KeyPreview не является большим количеством предварительного просмотра, и это событие может быть отключено на несколько остановок на этом пути.

(кредит для @HansPassant для этих точек.)

Вместо этого переопределите ProcessCmdKey в вашем Form:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
    if (keyData == Keys.Up)
    {
        // Handle key at form level.
        // Do not send event to focused control by returning true.
        return true;
    }
  return base.ProcessCmdKey(ref msg, keyData);
}

Таким образом, все клавиши видны методу, и метод первый в строке, чтобы увидеть событие.

Обратите внимание, что вы все еще имеете контроль над тем, контролировали ли сфокусированные элементы управления событие KeyDown. Просто верните true, чтобы заблокировать последующее событие KeyDown, вместо установки KeyPressEventArgs.Handled на true, как это было бы в обработчике события KeyDown. Здесь - статья с более подробной информацией.

26
ответ дан Community 27 August 2018 в 01:08
поделиться

Попробуйте установить для свойства KeyPreview в вашей форме значение true. Это работало для меня для регистрации нажатия клавиш.

19
ответ дан Seb Charrot 27 August 2018 в 01:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: