Нажмите клавишу Escape для вызова метода

Есть ли способ запустить метод на С#, если нажата клавиша? Например, Esc?

Ответ 1

Я пишу приложение WinForms. Пользователь заполняет текстовое поле, и если он хочет удалить все, он просто нажимает клавишу esc на клавиатуре

Думаю, вам нужно обработать событие KeyDown.

Ответ 2

используйте событие OnKeyPress вашего текстового поля и в случае

if(e.KeyCode==Keys.Escape)
{
    yourTextBox.Text = string.Empty;
}

Ответ 3

Как уже упоминалось, обрабатывайте событие KeyDown или KeyUp соответствующего элемента управления. Событие KeyPress будет работать и для клавиши Escape, хотя для некоторых ключей они не будут запускаться, например Shift, Ctrl или ALt.

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

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

В некоторых ситуациях вы можете запретить дочерним элементам управления обрабатывать одно и то же событие, которое вы только что обработали. Вы можете использовать свойство 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;
    }
}

Ответ 4

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

Ответ 5

Если кто-то искал, как это сделать в консольном приложении

if (Console.ReadKey().Key == ConsoleKey.Escape)
{
    return;
}

Ответ 6

Вы пишете приложение консоли, приложение WinForms или что-то еще? Вы пытаетесь захватить ключ ESC во все времена (независимо от сфокусированного окна/приложения) или что-то еще?

Требуется больше контекста.

Если вы пишете консольное приложение, вам следует начать поиск таких вещей, как Console.ReadKey...

http://msdn.microsoft.com/en-us/library/system.console.readkey.aspx

Ответ 7

Сначала в свойствах do > KeyPreview: True

Тогда:

private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.Escape)
        {
            //call your method here
        }
    }

Ответ 8

С событием KeyPress...

   //Escape 
   if (e.KeyChar == '')
   {
            this.DialogResult = DialogResult.Cancel;
            e.Handled = true;
   }

Ответ 9

Вы также можете использовать событие KeyUp. Я предпочитаю это.

private void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) {
     if (e.Key == Key.Escape) {
         //WHAT WILL HAPPEN INSERT HERE
     }
}