Диалог OK-Cancel: обработка нажатия клавиши «Ввод» - PullRequest
3 голосов
/ 05 апреля 2011

Я строю Dialog в Winforms. У него есть две кнопки «ОК» и «Отмена», которые присутствуют при его создании, что я и хочу. В этом диалоговом окне у меня также есть TextBox и Sub (кодирование в VB.NET), которое обрабатывает событие KeyPress. Мне нужно, чтобы что-то происходило при нажатии клавиши «Ввод».

Теперь, я сделал такую ​​KeyPress обработку раз и снова. Эта ситуация, однако, отличается, потому что как только нажата клавиша «Ввод», диалог автоматически предполагает, что вы нажали кнопку «ОК», возвращает результат и закрывается. Как в Designer, так и в реальной форме при запуске приложения кнопка OK выделяется, что означает, что она всегда имеет какой-то фокус (из-за отсутствия лучшего термина). Как я могу отключить эту функцию диалога? Когда я отлаживаю свой код, нажатие клавиши ввода не приводит даже к подпрограмме, обрабатывающей событие KeyPress. Он просто закрывает диалог и возвращает результат, поэтому я не могу пошагово просмотреть код и посмотреть, что происходит за кулисами.

Если повторить вопрос, как я могу отключить эту функцию?

Ура! =)

Ответы [ 3 ]

5 голосов
/ 05 апреля 2011

Проверьте свойства вашей формы в режиме конструктора, убедитесь, что для AcceptButton ничего не установлено.

3 голосов
/ 05 апреля 2011

Это способ, которым он должен работать.Вам следует установить свойство формы AcceptButton для кнопки ОК.Он получает жирную границу, чтобы указать, что это кнопка по умолчанию, чье событие Click автоматически запускается, когда пользователь нажимает Enter.Если вы установите для свойства DialogResult кнопки значение OK, оно также автоматически назначит свойство DialogResult, чтобы диалоговое окно закрылось.

Не исправляйте его.Если вы хотите отладить его, установите перерыв в обработчике события Click кнопки.Если вы хотите предотвратить его закрытие, то либо сбросьте свойство DialogResult кнопки, либо установите для свойства DialogResult формы значение None.Никогда не используйте событие KeyPressed.

1 голос
/ 17 ноября 2011

Ответ 2 делает свое дело!

Ничего не нужно менять в default OK_Button_Click sub

Просто сделал саб для обработки изменений во входных значениях - в моем случае это был числовойinput:

Private Sub SetKey_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SetKey.ValueChanged

        'Form1 do stuff

End Sub

Затем я добавил этот код, чтобы сместить фокус на кнопку OK.Итак, он готов снова принять Enter и завершить диалог, если пользователь хочет завершить - необязательно:

Private Sub frmMain_KeyDown(ByVal sender As System.Object, ByVal e As  System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress

    If e.KeyChar = Chr(Keys.Enter) Then OK_Button.Focus()

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