【送料無料】 225/60R18 18インチ WORK ワーク マイスター M1R 7.5J 7.50-18 YOKOHAMA ヨコハマ ブルーアース RV-02 SALE サマータイヤ ホイール4本セットの価格と品揃え

CUSCOパワーブレース リアエンド用NSP120ラクティス 10/11~
Loading
» セキュリティリポート裏話【BRZ プローバ】BRZ ZC6 スポーツステアリング 350Z 【2016/3月上旬発売】
» SRE
» DX時代のエンジニア
» U&Iターン
» その他の特集
@IT > Insider.NET > .NET TIPS > Windowsアプリケーションで方向キーなどの特殊キーを処理するには?
 

.NET TIPS

【送料無料】 225/60R18 18インチ WORK ワーク マイスター M1R 7.5J 7.50-18 YOKOHAMA ヨコハマ ブルーアース RV-02 SALE サマータイヤ ホイール4本セットお買取しました

デジタルアドバンテージ
2004/12/10

 「TIPS:コントロールに対するキー入力をフォームで処理するには?」では、フォームのKeyDownイベント・ハンドラで、コントロール上のキー入力を一括処理する方法を紹介した。

 しかし、例えばButtonコントロールにフォーカスがあるときに入力した[↑][↓][→][←]などの方向キーは、この方法では処理することができない。そこで、本稿ではそのようなキー入力を処理する方法を紹介する。

Buttonコントロールで方向キーが処理できない理由

 Buttonコントロールでの方向キーの入力が、通常のKeyDownなどのキー・イベントで処理できないということは、「方向キーが通常の入力キー(以降、普通入力キー)とは異なる」ことを意味する。Buttonコントロールの方向キーは「プリプロセス(=前処理)を必要とする特殊な入力キー」(以降、特殊入力キー)である。

 .NET Frameworkで構築されたWindowsアプリケーションでは、入力されたキーは、通常のKeyDownなどのキー・イベント処理の実行前に 【セミオーダー エイムゲイン】AIMGAIN TISSUE CASE PVC LEATHER ベージュ、「プリプロセス」と呼ばれる処理工程を通過する。このプリプロセスの工程で処理された入力キーは 【送料無料】 245/40R19 19インチ PREMIX プレミックス ルマーニュ(ブラックポリッシュ) 8J 8.00-19 DUNLOP ダンロップ ルマン V(ファイブ) サマータイヤ ホイール4本セット フジコーポレーション、基本的に、その後のKeyDownなどのキー・イベント処理が実行されない。

 これは、すでにプリプロセスで何らかの処理を実行済みなので、さらにその後でキー処理を行う必要がないからだ。例えば、Buttonコントロールで[↓]キーを押すと、Windowsアプリケーションはプリプロセス工程で自動的にフォーカス移動の処理を実行する。よって、その後でKeyDownイベントを処理する必要はなくなる。

 しかし、実際のアプリケーションでは、そのような通常のアプリケーション動作をカスタマイズしたい場合がある。例えば、通常のアプリケーション動作では[↓]キーでフォーカス移動すると、そのフォーカス移動先がGroupBoxコントロールなどにより設定されたグループ内でループするようになっているが、それをカスタマイズして、グループを越えてフォーカス移動するようにしたい場合などが挙げられる。

 そのような場合、次の2種類の方法のいずれかを選択できる。

  1. プリプロセス工程における処理をカスタマイズする
  2. 特殊入力キーを普通入力キーに変更する

 この2つの方法についてそれぞれ解説していこう。

 なお、プリプロセスにより処理される特殊入力キー(「ダイアログ・キー」と呼ばれる)は、方向キーのほかに、[PageUp][PageDown][Esc][Tab][Enter]などのキーがある(ただし特殊入力キーはコントロールにより異なる場合があるので注意が必要だ)。これらのキーを入力すると 、特に何も実装しなくてもフォーム上でフォーカス移動などが可能なのは、プリプロセス工程で何らかの処理が実行されているおかげである。

1. プリプロセスにおける処理をカスタマイズする

 プリプロセスをカスタマイズするには、フォームのProcessDialogKeyメソッドをオーバーライドして 【送料無料】 245/35R19 19インチ BIGWAY ビッグウエイ LEYCROSS レゼルヴァ 8J 8.00-19 DUNLOP ダンロップ ルマン 4(LM704) サマータイヤ ホイール4本セット【DUsum18】、そのメソッド内でキー処理を行えばよい。もちろんフォームではなく、コントロールのProcessDialogKeyメソッドをオーバーライドしても同様の結果が得られる。

 次のコードは、実際に、フォームのProcessDialogKeyメソッドをオーバーライドした例である。この例では、方向キーでグループを越えたフォーカス移動を行うように、処理をカスタマイズしている。

 

 なお マーク2/クレスタ/チェイサー[JZX101/JZX105][96/9~01/06]ご注文前下記詳細要確認フロント左右(bremboブレンボプレーンローター)代引注文不可、ProcessDialogKeyメソッドはコントロール→フォームの順で呼ばれる。ProcessDialogKeyメソッドでは、独自にキーを処理した場合には、それを示すために戻り値でTrueを返すようにする。

 また、コントロールのProcessDialogKeyメソッドは、コントロールのPreProcessMessageメソッドから暗黙的に呼び出される。そのため、プリプロセス工程の最初のメソッドであるコントロールのPreProcessMessageメソッドをオーバーライドしても、同様にプリプロセス工程でのキー処理をカスタマイズできる。しかし、コントロールのProcessDialogKeyメソッドやPreProcessMessageメソッドをオーバーライドする方法を採用する場合、当然、コントロールの継承が必要になる。

2. 特殊入力キーを普通入力キーに変更する

 次にプリプロセスが必要な特殊入力キーを普通のキー入力に変更する方法を説明する。

 この方法では、コントロールのIsInputKeyメソッドをオーバーライドするため、コントロールの継承が必要になる。IsInputKeyメソッドはプリプロセス中に呼び出されるメソッドで、その戻り値でTrueを返すようにすると、そのキーは特殊入力キーではなく、普通入力キーとして取り扱われ、プリプロセス処理(例えば、ProcessDialogKeyメソッドの呼び出し)が行われずに、通常のキー・イベントが発生するようになる。

 次のコードは、実際に、ButtonコントロールのIsInputKeyメソッドをオーバーライドした例だ。この例では、方向キーが通常のキー・イベントで処理されるようにカスタマイズしている。これにより、方向キーの処理をKeyDownイベント・ハンドラで実装することが可能になる。

 

 以上の2つの方法の中でも、前者のProcessDialogKeyメソッドをオーバーライドする方法が、最も単純で実装も楽だろう。

特殊入力「文字」(Char)について

 なお、今回紹介したProcessDialogKeyメソッドやIsInputKeyメソッドに類似した名前のメソッドに次のものがある。

  • ProcessDialogCharメソッド
  • IsInputCharメソッド

 ProcessDialogCharメソッドは、今回のProcessDialogKeyメソッドと同様にプリプロセス工程で呼び出されるが、このメソッドはコントロールのニーモニック(=アクセス・キー)などのダイアログ文字を処理する(例えば、[Alt]+[T]キーなどのアクセス・キーは、このメソッドにより処理される)。入力されたキー(Keys列挙対の値。キー・コード)に対応する「文字」(Char構造体の値。文字コード)が、このような「プリプロセスが必要な特殊入力文字」の場合(つまり、IsInputCharメソッドの戻り値がFalseを返す場合)、ProcessDialogCharメソッドがその入力文字を処理する。ProcessDialogCharメソッドでは、文字を独自に処理した場合には、それを示すために戻り値でTrueを返すようにする。

 特殊入力文字を処理するためには 【送料無料】ESPELIR(エスペリア) SUPER DOWNSUS 1台分セット 品番:ESH-1427 ホンダ N-WGN Custom JH1 S07A H25/11~ ESPELIR [ダウンサス サスペンション 自動車]、キー処理の場合と同じように、次の方法のいずれかを実装すればよい。

  1. プリプロセス工程における処理をカスタマイズする
  2. 特殊入力文字を普通入力文字に変更する

 1を行うには、フォームやコントロールのProcessDialogCharメソッドをオーバーライドすればよい。2を行うには、コントロールのIsInputCharメソッドをオーバーライドすればよい。

 



Insider.NET フォーラム 新着記事
- PR -

【送料無料】 225/60R18 18インチ WORK ワーク マイスター M1R 7.5J 7.50-18 YOKOHAMA ヨコハマ ブルーアース RV-02 SALE サマータイヤ ホイール4本セットアウトレット専門店

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH

{yahoojp} {atmarkit.co.jp}
{yahoojp}jpprem01-zenjp40-wl-zd-31650