这不是重复的。许多类似的主题讨论了捕获涉及修饰键的组合。
Insert+Tab
当从控件按下快捷键(的组合)时,我需要触发某些东西,例如Button
。
抓住:
这不涉及修饰键,例如
Alt
.NETShift
内置的检查。这有
Tab
不那么容易抓住的关键。
我尝试并接近的:
1)KeyDown 事件但不捕获选项卡..
[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...........
}
但是我可以放弃这个..
谢谢..