C# Form.ProcessDialogKey似乎给出了模棱两可的按键
目前,我正在覆盖WinForms表单内部,以允许用户在按Alt+1时直接选择表单内部选项卡控件的选项卡页。。。Alt+9 即,按Alt+1应选择第一个选项卡,按Alt+2应选择第二个选项卡,以此类推 这是我的代码摘录:C# Form.ProcessDialogKey似乎给出了模棱两可的按键,c#,.net,winforms,.net-2.0,key,C#,.net,Winforms,.net 2.0,Key,目前,我正在覆盖WinForms表单内部,以允许用户在按Alt+1时直接选择表单内部选项卡控件的选项卡页。。。Alt+9 即,按Alt+1应选择第一个选项卡,按Alt+2应选择第二个选项卡,以此类推 这是我的代码摘录: protected override bool ProcessDialogKey(Keys keyData) { if ((e.KeyData & Keys.Alt) == Keys.Alt) { if ((e.KeyData & K
protected override bool ProcessDialogKey(Keys keyData)
{
if ((e.KeyData & Keys.Alt) == Keys.Alt)
{
if ((e.KeyData & Keys.D1) == Keys.D1) tabIndex = 0;
else if ((e.KeyData & Keys.D1) == Keys.D1) tabIndex = 0;
else if ((e.KeyData & Keys.D2) == Keys.D2) tabIndex = 1;
else if ((e.KeyData & Keys.D3) == Keys.D3) tabIndex = 2;
// ...
}
}
我发现我的支票有多余的结果。例如,按Alt+3时
我确实认为这是非常合乎逻辑的,因为它不需要对其他键
成员值进行大量的按位组合
所以我不知道为什么我得到了太多的true
结果,我只是不知道如何进行正确的检查
我的问题:
我是否可以使用Form.ProcessDialogKey
方法来检查Alt+1…Alt+9组合,还是应该选择另一种方法
(如果有另一个aproach,我很想获得它的链接)
更新1:
如果我颠倒检查顺序,即首先是
Keys.D9
,然后是Keys.D1
,则匹配效果更好(正确?,在此处使用&运算符是不正确的。Keys枚举具有[Flags]属性,但它是标志和值的组合。因此,在int或long中,键比位多得多。有些位表示修饰符,如Keys.Alt,但较低的16位是键代码,您需要使用==运算符对其进行比较
考虑以下代码以保持干燥:
protected override bool ProcessDialogKey(Keys keyData) {
if (keyData >= (Keys.Alt | Keys.D1) && keyData <= (Keys.Alt | Keys.D9)) {
int cmd = (keyData & Keys.KeyCode) - Keys.D0;
// etc...
return true;
}
return base.ProcessDialogKey(keyData);
}
protectedoverride bool ProcessDialogKey(Keys-keyData){
如果(keyData>=(Keys.Alt | Keys.D1)和&keyData在此处使用&运算符是不正确的。Keys枚举具有[Flags]属性,但它是标志和值的组合。必然如此,int或long中的键比位多得多。有些位表示修饰符,如keys.Alt,但较低的16位是键代码,您需要使用==运算符进行比较
考虑以下代码以保持干燥:
protected override bool ProcessDialogKey(Keys keyData) {
if (keyData >= (Keys.Alt | Keys.D1) && keyData <= (Keys.Alt | Keys.D9)) {
int cmd = (keyData & Keys.KeyCode) - Keys.D0;
// etc...
return true;
}
return base.ProcessDialogKey(keyData);
}
protectedoverride bool ProcessDialogKey(Keys-keyData){
如果(keyData>=(Keys.Alt | Keys.D1)&&keyData谢谢,Hans。在您的回答之后,我尝试在谷歌上搜索一些文档,了解如何正确查询Keys
变量中的值,其他情况与我类似。我在这里没有找到。您能透露一些来源(URL)吗谢谢你,汉斯。在你回答之后,我试着在谷歌上搜索一些关于如何正确查询键
变量中的值的文档,其他情况如我的情况。我没有找到。你能透露一些来源(URL)吗。
protected override bool ProcessDialogKey(Keys keyData) {
if (keyData >= (Keys.Alt | Keys.D1) && keyData <= (Keys.Alt | Keys.D9)) {
int cmd = (keyData & Keys.KeyCode) - Keys.D0;
// etc...
return true;
}
return base.ProcessDialogKey(keyData);
}