C# 未调用KeyDown事件
使用C# 未调用KeyDown事件,c#,.net,winforms,C#,.net,Winforms,使用ProcessCmdKey覆盖: private void Form1_KeyDown(object sender, KeyEventArgs e) { // The program flow does not enter this scope. if (e.KeyCode == Keys.Right) { } } 使用ProcessCmdKey覆盖: private void Form1_KeyDown(object sender, KeyEventAr
ProcessCmdKey
覆盖:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
// The program flow does not enter this scope.
if (e.KeyCode == Keys.Right)
{
}
}
使用
ProcessCmdKey
覆盖:
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
// The program flow does not enter this scope.
if (e.KeyCode == Keys.Right)
{
}
}
您需要将表单的
KeyPreview
属性设置为true
根据MSDN
当此属性设置为true时,窗体将接收所有按键,
KeyDown和KeyUp事件。在窗体的事件处理程序
完成对击键的处理后,将击键分配给
该控件具有焦点。例如,如果设置了KeyPreview属性
设置为true,并且当前选择的控件是文本框,位于
击键由TextBox表单的事件处理程序处理
控件将接收已按下的键。操作键盘
事件仅在窗体级别,不允许控件接收
键盘事件,设置键盘中的KeyPressEventArgs.Handled属性
窗体的按键事件处理程序设置为true
这可以在设计时完成,只需为表单的KeyPreview
或者手动操作
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
System.Diagnostics.Debug.WriteLine("Right key pressed");
return true;
}
您需要将表单的
KeyPreview
属性设置为true
根据MSDN
当此属性设置为true时,窗体将接收所有按键,
KeyDown和KeyUp事件。在窗体的事件处理程序
完成对击键的处理后,将击键分配给
该控件具有焦点。例如,如果设置了KeyPreview属性
设置为true,并且当前选择的控件是文本框,位于
击键由TextBox表单的事件处理程序处理
控件将接收已按下的键。操作键盘
事件仅在窗体级别,不允许控件接收
键盘事件,设置键盘中的KeyPressEventArgs.Handled属性
窗体的按键事件处理程序设置为true
这可以在设计时完成,只需为表单的KeyPreview
或者手动操作
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
System.Diagnostics.Debug.WriteLine("Right key pressed");
return true;
}
你可以用这个:
public class Form1 : Form
{
public Form1()
{
base.KeyPreview = true;
InitializeComponent();
}
}
注意:这是我脑子里想不出来的,所以可能不是100%准确,但我98%确信它会起作用:)你可以用这个:
public class Form1 : Form
{
public Form1()
{
base.KeyPreview = true;
InitializeComponent();
}
}
注意:这是我的想法,所以可能不是100%准确,但我98%确信它会工作:)嗯,如果调试没有调用事件。如果是这样,请检查eUwe Keim,不确定注释是否指
If
范围而不是方法范围。您的编辑可能会改变问题的性质,因此我将其还原,直到OP提供更多上下文。请参阅@Theodoroschatziganakis同意!嗯,如果调试没有调用事件。如果是这样,请检查eUwe Keim,不确定注释是否指If
范围而不是方法范围。您的编辑可能会改变问题的性质,因此我将其还原,直到OP提供更多上下文。请参阅@Theodoroschatziganakis同意!我已经设置好了,同样的问题@user3763059确保KeyDown事件已连接:this.KeyDown+=Form1\u KeyDown代码>或简单地使用覆盖:受保护的覆盖void OnKeyDown(KeyEventArgs e){}
。完成了-在表单设计代码this.KeyDown+=new System.Windows.Forms.KeyEventHandler(this.Form1\u KeyDown)中@user3763059我更新了答案。我已经设置好了,同样的问题@user3763059确保KeyDown事件已连接:this.KeyDown+=Form1\u KeyDown代码>或简单地使用覆盖:受保护的覆盖void OnKeyDown(KeyEventArgs e){}
。完成了-在表单设计代码this.KeyDown+=new System.Windows.Forms.KeyEventHandler(this.Form1\u KeyDown)中@user3763059我更新了答案。仍然不工作,不幸的是同样的问题@用户3763059-我建议您遵循此答案。仍然不工作,不幸的是同样的问题@用户3763059-我建议您遵循此答案。