按Escape键调用方法
如果按下某个键,有没有办法在C#中启动方法? 例如, Esc ?
我正在编写WinForms应用程序。 用户填写文本框,如果他想删除所有内容,只需单击键盘上的esc键即可
我认为你需要处理KeyDown事件 。
使用文本框的OnKeyPress事件和事件
if(e.KeyCode==Keys.Escape) { yourTextBox.Text = string.Empty; }
正如其他人所提到的,处理适当控件的KeyDown
或KeyUp
事件。 KeyPress
事件也适用于Escape键,但它不会触发某些键,例如Shift , Ctrl或ALt 。
如果要在用户按下Escape键时执行此function,则可能需要在Form上处理该事件。 如果这样做,您可能还需要将Form的KeyPreview
属性设置为true。 这将允许Form控件接收事件,即使焦点当前位于其中一个子控件内。
如果您希望行为特定于控件,例如清除当前具有焦点的文本框中的文本,则应该处理TextBox
控件的KeyDown
或KeyUp
事件。 这样,如果用户按下文本框外部的转义键,则不会触发事件处理程序。
在某些情况下,您可能希望阻止子控件处理您刚刚处理的同一事件。 您可以使用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 } }