Form.ProcessDialogKey
現在、WinForms フォーム内のメソッドをオーバーライドして、ユーザーがAlt+ 1... Alt+を押したときにフォーム内のタブ コントロールのタブ ページを直接選択できるようにしています9。
Altつまり、 +を押す1と最初のタブが選択され、Alt+ 22 番目のタブが選択されます。
これは私のコードの抜粋です:
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
列挙Keys
は他のメンバー値のビットごとの組み合わせを多く行うため、これは非常に論理的だと思います。
だから私は unsertand を行い、なぜあまりにも多くのtrue
結果が得られるのか、正しいチェックを行う方法がわかりません。
私の質問:
Form.ProcessDialogKey
このメソッドを使用してAlt+ 1... Alt+9の組み合わせを確認できますか、それとも別のアプローチを選択する必要がありますか?
(別のアプローチがある場合は、それへのリンクを取得したいと思います)
更新 1:
チェックの順序を逆にすると、つまり、最初Keys.D9
に、次にそれまでKeys.D1
のマッチングがうまくいくようです (正しいですか?)