У Kyle есть правильный подход в том, чтобы спрашивать о взаимодействии. Нет никакого "корректного" ответа, не зная, каковы шаблоны использования, вероятно, будут.
Любое архитектурное решение - особенно на этом уровне - является компромиссом.
необходимо спросить себя:
, Пока у Вас не будет понимания ответов или потенциальных ответов, к тем вопросам, будет трудно выбрать архитектуру реализации. Как только мы знаем, какие факторы важны, будет намного легче выбрать более подходящих кандидатов реализации, которые отражают требования рабочей системы.
Я пишу приложение WinForms. Пользователь заполняет текстовое поле, и если он хочет удалить все, он просто нажимает клавишу esc на клавиатуре
Я думаю, вам нужно обработать событие KeyDown .
используйте событие OnKeyPress вашего текстового поля и в событии
if(e.KeyCode==Keys.Escape)
{
yourTextBox.Text = string.Empty;
}
Вы пишете консольное приложение, приложение WinForms или что-то еще? Вы пытаетесь захватить клавишу ESC все время (независимо от окна / приложения в фокусе) или что-то еще?
Требуется больше контекста.
Если вы пишете консольное приложение, тогда вам следует начать с таких вещей, как Console.ReadKey ...
http://msdn.microsoft.com/en-us/library/system.console.readkey.aspx
Как уже упоминалось, обрабатывать событие KeyDown
или KeyUp
соответствующего элемента управления. Событие KeyPress
будет работать и для клавиши Escape , но не сработает для некоторых клавиш, таких как Shift , Ctrl или ALt .
Если вы хотите выполнять эту функцию каждый раз, когда пользователь нажимает клавишу Escape , то вы, вероятно, захотите обработать событие в форме. Если вы сделаете это, вы, вероятно, также захотите установить для свойства формы KeyPreview
значение true. Это позволит элементу управления Form получать событие, даже если фокус в данный момент находится внутри одного из дочерних элементов управления.
Если вы хотите, чтобы поведение было специфичным для элемента управления, например очистка текста в текстовом поле, которое в настоящее время имеет фокус затем следует обработать событие KeyDown
или KeyUp
элемента управления TextBox
. Таким образом, ваш обработчик событий не будет запущен, если пользователь нажмет клавишу escape за пределами текстового поля.
В некоторых ситуациях вам может потребоваться запретить дочерним элементам управления обрабатывать то же событие, которое вы только что обработали. Вы можете использовать свойство SuppressKeyPress
в классе KeyEventArgs
, чтобы управлять этим поведением:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
MessageBox.Show("Escape key pressed");
// prevent child controls from handling this event as well
e.SuppressKeyPress = true;
}
}