我的目标是实现一个自定义Control + S键按下处理程序,以连接到winforms应用程序中的自定义保存方法.
基于我的研发,有几种方法可以实现这一目标.首先,我尝试了明显的KeyPress事件处理程序.这不足以捕获我需要的按键(它没有在编辑器级别调用,这是我需要的).
看起来更好的第二个选项是受保护的覆盖bool ProcessCmdKey(ref Message msg,Keys keyData)覆盖.这有效 - 它拦截了CTRL键点击,但显然我需要编写额外的代码来坚持按下CTRL键的事实并拦截下一次按键(在我的情况下将是S),然后执行自定义操作.
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
if (keyData == (Keys.S | Keys.Control))
{
// This is never called
}
else if (keyData == (Keys.Menu | Keys.Alt))
{
// this is called each time I hit CTRL
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
在我按下CTRL键后,似乎立即调用了ProcessCmdKey.
这篇文章建议创建一个KeyTracker类,它将持久按下按键并执行它需要做的事情:
这似乎是一个不错的选择,但在我开始实现一个纪念品跟踪模式之前,是否有人对如何完成这个看似常见的功能有任何意见?
另一种模式使用GetKeyboardState API函数:
这看起来很有趣,但我不确定它是否符合我的需求.
[DllImport ("user32.dll")]
Run Code Online (Sandbox Code Playgroud)
public static extern int GetKeyboardState(byte [] keystate);
private void Form1_KeyDown( object sender, KeyEventArgs e )
{ …
Run Code Online (Sandbox Code Playgroud)