如果按下某个键,有没有办法在C#中启动方法?例如, Esc ?
答案 0 :(得分:22)
使用文本框的OnKeyPress事件和事件
if(e.KeyCode==Keys.Escape)
{
yourTextBox.Text = string.Empty;
}
答案 1 :(得分:14)
正如其他人所提到的,处理相应控件的KeyDown
或KeyUp
事件。 KeyPress
事件也适用于 Escape 键,但它不会触发某些键,例如 Shift , Ctrl 或 ALt 。
如果您想在用户按下 Escape 键时执行此功能,那么您可能希望在表单上处理该事件。如果这样做,您可能还希望将Form的KeyPreview
属性设置为true。这将允许Form控件接收事件,即使焦点当前位于其中一个子控件内。
如果您希望行为特定于控件,例如清除当前具有焦点的文本框中的文本,那么您应该处理{{1}的KeyDown
或KeyUp
事件}} 控制。这样,如果用户按下文本框外部的转义键,则不会触发事件处理程序。
在某些情况下,您可能希望阻止子控件处理您刚刚处理的同一事件。您可以使用TextBox
类上的SuppressKeyPress
属性来控制此行为:
KeyEventArgs
答案 2 :(得分:4)
我正在编写WinForms应用程序。用户填写文本框,如果他想删除所有内容,他只需点击键盘上的 esc 键
我认为您需要处理the KeyDown event。
答案 3 :(得分:3)
您必须将表单属性“KeyPreview”切换为true ,否则您的活动不会被触发。即使事件是正确的,单独处理这些事件也不会做任何事情。即使您订阅了正确的事件处理程序,它也会让您感觉不到任何真正的事情。
答案 4 :(得分:3)
如果有人在控制台应用
中寻找如何执行此操作if (Console.ReadKey().Key == ConsoleKey.Escape)
{
return;
}
答案 5 :(得分:2)
首先在属性中执行> KeyPreview:True
然后:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
//call your method here
}
}
答案 6 :(得分:1)
您是在编写控制台应用程序,WinForms应用程序还是其他什么?您是否一直试图捕获 ESC 键(无论是聚焦窗口/应用程序)还是其他什么?
需要更多上下文。
如果您正在编写Console应用程序,那么您应该开始查看Console.ReadKey之类的内容......
http://msdn.microsoft.com/en-us/library/system.console.readkey.aspx
答案 7 :(得分:0)
使用Event KeyPress ...
//Escape
if (e.KeyChar == '')
{
this.DialogResult = DialogResult.Cancel;
e.Handled = true;
}
答案 8 :(得分:0)
您也可以使用KeyUp事件。我更喜欢它。
private void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) {
if (e.Key == Key.Escape) {
//WHAT WILL HAPPEN INSERT HERE
}
}
答案 9 :(得分:0)
这里多次列出基本答案
实施 Form_KeyDown
Private Sub frmCustomerSearch_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
Try
If e.KeyCode = Keys.Escape Then
ClearFindForm()
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
设置 form.keyPreview
form.KeyPreview = true
您需要检查的另一件事是您是否有一个捕获 ESC 的按钮,因此它可以是 form.cancelButton
确定...
form.CancelButton = nothing
这是偷偷摸摸的。如果您已经设置并忘记了它,Escape 键将不会触发 KeyDown 事件。
我之所以这样做是因为将按钮设置为表单。CancelButton 如果不可见或在不可见的选项卡上似乎不会触发,因此 KEYDOWN 是您唯一的选择。