private void Form1_KeyDown(object sender, KeyEventArgs e)
{
// The program flow does not enter this scope.
if (e.KeyCode == Keys.Right)
{
}
}
答案 0 :(得分:3)
您需要将表单的KeyPreview
属性设置为true
根据MSDN
当此属性设置为true时,表单将接收所有KeyPress, KeyDown和KeyUp事件。表单的事件处理程序之后 完成按键操作后,按键分配到 有焦点的控制。例如,如果设置了KeyPreview属性 为true,当前选中的控件是一个TextBox,之后 keystroke由TextBox形式的事件处理程序处理 控件将收到按下的键。处理键盘 事件仅在表单级别,不允许控件接收 键盘事件,设置你的KeyPressEventArgs.Handled属性 form的KeyPress事件处理程序为true。
这可以在设计时完成,只需为Form的KeyPreview
或手动执行
public class Form1 : Form
{
public Form1()
{
base.KeyPreview = true;
InitializeComponent();
}
}
答案 1 :(得分:2)
使用ProcessCmdKey
覆盖:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Right)
System.Diagnostics.Debug.WriteLine("Right key pressed");
return true;
}
答案 2 :(得分:0)
你可以用这个:
KeyboardState ks = new KeyboardState();
if(ks.isKeyDown(Keys.Right)
{
System.Diagnostics.Debug.WriteLine("Right key pressed");
}
注意:这不是我的头脑,所以可能不是100%准确,但我98%确定它会起作用:)