C# winForm 键盘事件
相关问题描述:
KeyDown捕获不到键盘事件,按下键盘上的方向键不能触发KeyDown事件。按键没有KeyPress事件响应,键盘按键只有KeyUp响应。
这个问题可以通过查询MSDN里关于KeyDown、KeyPress、KeyUp的注释,找到原因。在MSDN上记录有,控件会根据自身的情况不同处理某些特殊键盘按键(除去正常字符输入键之外的其他按键),而导致KeyPress-KeyDown-KeyUp中的部分按键事件触发。所以,在设计程序的时候,如果遇到某些按键事件关联的业务逻辑没有被触发,一定要考虑这方面的因素。
问题到这里也就算解决了,为了让文章显得丰满一点,这里贴一点附加的东西(图片、代码什么的)
控件 的按键相关事件
void MainForm_KeyUp(object sender, KeyEventArgs e)
{
}
void MainForm_KeyDown(object sender, KeyEventArgs e)
{
}
void MainForm_KeyPress(object sender, KeyPressEventArgs e)
{
}
protected override bool IsInputChar(char charCode)
{
return base.IsInputChar(charCode);
}
protected override bool IsInputKey(Keys keyData)
{
return base.IsInputKey(keyData);
}
protected override bool ProcessKeyEventArgs(ref Message m)
{
return base.ProcessKeyEventArgs(ref m);
}
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
return base.ProcessCmdKey(ref msg, keyData);
}
protected override bool ProcessDialogKey(Keys keyData)
{
return base.ProcessDialogKey(keyData);
}
protected override bool ProcessKeyMessage(ref Message m)
{
return base.ProcessKeyMessage(ref m);
}
protected override bool ProcessKeyPreview(ref Message m)
{
return base.ProcessKeyPreview(ref m);
}
protected override bool ProcessDialogChar(char charCode)
{
return base.ProcessDialogChar(charCode);
}
protected override bool ProcessMnemonic(char charCode)
{
return base.ProcessMnemonic(charCode);
}
protected override bool ProcessTabKey(bool forward)
{
return base.ProcessTabKey(forward);
}
KeyDown的英文MSDN:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keydown.aspx
代码下载:http://www.itivy.com/DownloadFile.ashx?id=634458093510515127
参考文章:http://www.cnblogs.com/stublue/archive/2010/08/31/1814076.html
方向之于生命