【发布时间】:2013-02-23 23:30:38
【问题描述】:
我有一个简单的窗体 Windows 应用程序,我在其上为我的特定任务放置了一个自定义控件,我已经为 Form 编写了 KeyDown 处理程序,问题是 KeyDown 处理程序可以很好地处理除箭头之外的每个键键...控件没有进入键处理程序?为什么会这样?当我删除自定义控件时它开始正常工作?
【问题讨论】:
-
当前焦点在哪里,哪个控件有?
我有一个简单的窗体 Windows 应用程序,我在其上为我的特定任务放置了一个自定义控件,我已经为 Form 编写了 KeyDown 处理程序,问题是 KeyDown 处理程序可以很好地处理除箭头之外的每个键键...控件没有进入键处理程序?为什么会这样?当我删除自定义控件时它开始正常工作?
【问题讨论】:
KeyPreview 是否开启? 哪个控件有焦点?
【讨论】:
我看不出表单不能预览箭头键的原因。但无论如何,如果您需要对键盘处理(特别是快捷键处理)进行更多低级访问,您可以覆盖表单的 ProcessCmdKey。
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == Keys.Left)
{
// your code here
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
【讨论】:
您应该在代码中的某个地方集中注意力以正确使用 ProcessCmdKey。
【讨论】: