【发布时间】:2012-08-03 12:43:31
【问题描述】:
这不是重复的。许多类似的主题讨论了捕获涉及修饰键的组合。
当从控件按下快捷键(Insert+Tab 的组合)时,我需要触发某些东西,比如Button。
赶上:
这不涉及像
Alt或Shift这样 .NET 已内置检查的修饰键。这有
Tab键,不容易被抓到。
我尝试并接近的方法:
1) KeyDown 事件 但不捕获 Tabs..
[DllImport("user32.dll")]
public static extern int GetKeyboardState(byte[] keystate);
static void form_KeyDown(object sender, KeyEventArgs e)
{
if (!(((Form)sender).ActiveControl is Button))
return;
byte[] keys = new byte[255];
GetKeyboardState(keys);
if (keys[(int)Keys.Insert] == 129 && keys[(int)Keys.Tab] == 129)
{
// doesn't work
}
if (keys[(int)Keys.Insert] == 129 && keys[(int)Keys.J] == 129)
{
// works, since here this doesnt involve Tab
}
}
这适用于常规组合,不会与Tab 一起触发。
2) KeyPreview 事件 捕获Tab 键,但我不知道如何按下组合键
static void form_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
if (!(((Form)sender).ActiveControl is Button))
return;
if (e.KeyCode == Keys.Tab)
//works
if (e.KeyCode == Keys.Insert && e.KeyCode == Keys.Tab)
//doesn't hit.
}
要求:
1) 我没有从 Form 类注册事件。相反,我有一个实用程序类,它创建所有必需的事件(以及其他快捷方式)。我只是将表单实例传递给静态函数。所以我很不确定我应该如何利用各种关键的覆盖调用。这是我的做法:
public frmLogin()
{
InitializeComponent();
Utility.SetFormEvents(this);
}
static void SetFormEvents(Form f){
//foreach control...........
}
但我可以放弃这个..
谢谢..
【问题讨论】:
-
你能用keyboard hooks试试吗?
-
@UweKeim 我认为可能有一些琐碎的方法......让我看看
标签: c# winforms .net-4.0 keypress keydown