Mar*_*lle 67 c# keydown winforms
我正在构建一个应用程序,其中所有键输入必须由Windows本身处理.
我为每个控件设置了tabstop为false,除了一个面板之外,女巫可以抓住焦点(但我不知道它是否有效).
我将KeyPreview设置为true,我正在处理此窗体上的KeyDown事件.
我的问题是,有时箭头键不再响应:
当我只按箭头键时,不会触发keydown事件.
如果我按下带有控件修饰符的箭头键,则会触发keydown事件.
你知道我的箭头键突然停止发射事件的原因吗?
Rod*_*ber 61
我遇到了完全相同的问题.我考虑了@Snarfblam提供的答案; 但是,如果您阅读MSDN上的文档,则ProcessCMDKey方法将覆盖应用程序中菜单项的关键事件.
我最近偶然发现了微软的这篇文章,看起来非常有前途:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx.据微软称,做的最好的事情是设置e.IsInputKey=true;在PreviewKeyDown检测方向键后事件.这样做会触发KeyDown事件.
这对我来说效果很好,并且比重写ProcessCMDKey要少得多.
小智 57
protected override bool IsInputKey(Keys keyData)
{
switch (keyData)
{
case Keys.Right:
case Keys.Left:
case Keys.Up:
case Keys.Down:
return true;
case Keys.Shift | Keys.Right:
case Keys.Shift | Keys.Left:
case Keys.Shift | Keys.Up:
case Keys.Shift | Keys.Down:
return true;
}
return base.IsInputKey(keyData);
}
protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
switch (e.KeyCode)
{
case Keys.Left:
case Keys.Right:
case Keys.Up:
case Keys.Down:
if (e.Shift)
{
}
else
{
}
break;
}
}
Run Code Online (Sandbox Code Playgroud)
sna*_*arf 16
请参阅Rodolfo Neuber的回复以获得最佳答案
(我原来的答案):
从控件类派生,您可以覆盖ProcessCmdKey方法.Microsoft选择从KeyDown事件中省略这些键,因为它们影响多个控件并移动焦点,但这使得应用程序很难以任何其他方式对这些键做出反应.
Mar*_*cel 16
我正在使用PreviewKeyDown
private void _calendar_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e){
switch (e.KeyCode){
case Keys.Down:
case Keys.Right:
//action
break;
case Keys.Up:
case Keys.Left:
//action
break;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
141301 次 |
| 最近记录: |