按Escape键调用方法

如果按下某个键,有没有办法在C#中启动方法? 例如, Esc

我正在编写WinForms应用程序。 用户填写文本框,如果他想删除所有内容,只需单击键盘上的esc键即可

我认为你需要处理KeyDown事件 。

使用文本框的OnKeyPress事件和事件

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

正如其他人所提到的,处理适当控件的KeyDownKeyUp事件。 KeyPress事件也适用于Escape键,但它不会触发某些键,例如ShiftCtrlALt

如果要在用户按下Escape键时执行此function,则可能需要在Form上处理该事件。 如果这样做,您可能还需要将Form的KeyPreview属性设置为true。 这将允许Form控件接收事件,即使焦点当前位于其中一个子控件内。

如果您希望行为特定于控件,例如清除当前具有焦点的文本框中的文本,则应该处理TextBox控件的KeyDownKeyUp事件。 这样,如果用户按下文本框外部的转义键,则不会触发事件处理程序。

在某些情况下,您可能希望阻止子控件处理您刚刚处理的同一事件。 您可以使用KeyEventArgs类上的SuppressKeyPress属性来控制此行为:

 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; } } 

您必须将表单属性“KeyPreview”切换为true,否则不会触发您的事件。 即使事件是正确的,单独处理这些事件也不会做任何事情。 即使您订阅了正确的事件处理程序,它也会让您觉得没有任何事情真的发生过。

如果有人正在寻找如何在控制台应用程序中执行此操作

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

首先在属性中> KeyPreview:True

然后 :

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

您在编写控制台应用程序,WinForms应用程序还是其他什么? 您是否一直试图捕获ESC键(无论是聚焦窗口/应用程序)还是其他什么?

需要更多背景。

如果您正在编写Console应用程序,那么您应该开始查看Console.ReadKey之类的内容……

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

使用Event KeyPress …

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

您也可以使用KeyUp事件。 我更喜欢它。

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