текстовое поле не теряет фокус - PullRequest
4 голосов
/ 30 августа 2011

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

Под обычным обслуживанием я подразумеваю, что форма должна начать получать все события. Что я сделал до сих пор, так это в событии KeyDown TextBox; когда клавиша Escape нажата, я установил фокус на основную форму следующим образом:

this.Focus(); //where this is mainform.

Но, похоже, это не работает, поскольку Textbox продолжает получать все ключи. У меня есть обработчик событий KeyDown для Form и Textbox, и я проверил, что все события KeyDown передаются в TextBox. У меня также есть обработчик события TextBox Leave, который никогда не вызывается.

Этот TextBox является единственным элементом управления в форме, а основная форма используется для рисования фигур (если это имеет значение).

Итак, как я могу сделать так, чтобы TextBox потерял фокус, когда пользователь нажимает за его пределы?

Ответы [ 3 ]

0 голосов
/ 30 августа 2011

Если вы установите для свойства KeyPreview формы значение true, у вашей формы будет первый шанс обработать любые нажатия клавиш. Если это то, что вы хотите обработать, то есть escape, как в вашем комментарии выше, обработайте это в KeyDownEvent вашей формы и пометьте как обработанное, чтобы текстовое поле его не увидело.

Сверху Msdn Page:

Если для этого свойства установлено значение true, форма будет получать все события KeyPress, KeyDown и KeyUp. После того, как обработчики событий формы завершили обработку нажатия клавиши, нажатие клавиши назначается элементу управления с фокусом.

0 голосов
/ 27 марта 2016

Я полагаю, еще в 11 году это не сработало, но сейчас

this.ActiveControl = null;

отлично работает. Однако если вы намереваетесь использовать Tab для циклического управления, лучше всего сфокусировать метку с подходящим TabIndex.

0 голосов
/ 30 августа 2011

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

...