目前,我正在重写 WinForms 表单中的Form.ProcessDialogKey
方法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.
is true
,但其他检查也是true
,例如:
(e.KeyData & Keys.D1) == Keys.D1 // <<== also TRUE.
(e.KeyData & Keys.D0) == Keys.D0 // <<== also TRUE.
我确实认为这很合乎逻辑,因为Keys
枚举对其他Keys
成员值进行了很多按位组合。
所以我不知道为什么我得到太多true
结果,我只是不知道如何做一个正确的检查。
我的问题:
我可以使用该Form.ProcessDialogKey
方法来检查Alt+ 1... Alt+9组合还是应该选择另一种方法?
(如果有另一种方法,我很想获得它的链接)
更新1:
似乎如果我颠倒检查顺序,即首先Keys.D9
然后再降低Keys.D1
匹配效果更好(正确吗?)