【发布时间】:2012-08-25 13:21:42
【问题描述】:
目前,我正在覆盖我的 WinForms 表单中的 Form.ProcessDialogKey method,以允许用户在按下 Alt+1 ... Alt+9.
即按 Alt+1 应该选择第一个选项卡,Alt+2 第二个选项卡,依此类推。
这是我的代码的摘录:
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,
(e.KeyData & Keys.D3) == Keys.D3 // <<== TRUE.
是true,但其他检查也是true,例如:
(e.KeyData & Keys.D1) == Keys.D1 // <<== also TRUE.
(e.KeyData & Keys.D0) == Keys.D0 // <<== also TRUE.
我确实认为这很合乎逻辑,因为 Keys enumeration 对其他 Keys 成员值进行了很多按位组合。
所以我不知道为什么我得到太多true 结果,我只是不知道如何进行正确的检查。
我的问题:
我可以使用Form.ProcessDialogKey 方法来检查 Alt+1...Alt+9 组合还是我应该选择另一种方法?
(如果有其他方法,我很想获得它的链接)
更新 1:
似乎如果我颠倒检查顺序,即首先Keys.D9,然后再下降到Keys.D1,匹配效果更好(正确吗?)
【问题讨论】:
标签: c# .net winforms .net-2.0 key