日期:2014-05-18  浏览次数:21181 次

C#下如何设置双快捷键?
例如,用户按下“Ctrl+J”,就相当于按下Button1.

C#如何实现?

------解决方案--------------------
在KeyPress事件中判断,如果Ctrl和J键的状态都是Pressed,就调用Button1的Click事件
------解决方案--------------------
如果是菜单项 可以直接指定
------解决方案--------------------
LZ是想在窗体中无论焦点在哪个控件上都会响应这个热键吗?那就重写Form的 bool ProcessDialogKey(Keys) 方法

C# code

        protected override bool ProcessDialogKey(Keys keyData)
        {
            if (keyData == (Keys.Control | Keys.J))
            {
                Button1.PerformClick();
                return true;
            }
            return base.ProcessDialogKey(keyData);
        }

------解决方案--------------------
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Control && e.KeyCode == System.Windows.Forms.Keys.J)
{
this.button1.click(sender e);
}
base.OnKeyDown(e);
}
------解决方案--------------------
窗体的KeyDown事件:
private void Game_KeyDown(object sender, KeyEventArgs e)
{
// F1快捷控制开始
if (e.KeyCode == Keys.F1)
{
button1.PerformClick();
}
}
------解决方案--------------------
学习中
------解决方案--------------------
keyDown在这里应该不行的,感觉应该重写ProcessDialogKey方法

protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Control | Keys.J)
{
...处理
return true;
}
return base.ProcessDialogKey(keyData);
}
------解决方案--------------------
噢,少了个括号:
if (keyData == (Keys.Control | Keys.J))
------解决方案--------------------
如果想要在windows的任何地方使用热键都有效,最好是使用api函数 RegisterHotKey() 具体方法在网上查查吧
------解决方案--------------------
mark
------解决方案--------------------
热键参考
http://blog.csdn.net/jinjazz/archive/2007/11/15/1886055.aspx