HardwareButtonクラスは、PokcetPCのハードウェアボタンの機能をオーバーライドします。コントロールに関連付けを行うと、ボタンが押された時にKeyDownイベントを受け取り、ボタンが離されるとKeyUPイベントを受け取ります。
端末によって実装されているハードウェアキーの個数が異なっておりアプリケーションキー全てに対応させる為、6つのアプリケーションキーに対応させたHardwareButtonクラスのオブジェクトを生成し、ハードウェアボタンをオーバーライドさせます。
public partial class MainForm : Form { // ハードウェアボタンを管理する配列を用意する HardwareButton[] hwbs = new HardwareButton[6];
フォームのコンストラクタで、HardwareButtonクラスを生成しハードウェアボタンが押下された時アクティブにする為にAssociatedControlプロパティにフォームを設定します。 ボタンが離された時に発生するKeyUpイベントと後述するOnKeyUpメソッドを関連付けます。
public MainForm() { InitializeComponent(); // KeyUpイベントを生成します this.KeyPreview = true; this.KeyUp += new KeyEventHandler(this.OnKeyUp); // ハードウェアボタンの定義の配列を作成 HardwareKeys[] hwKeys = { HardwareKeys.ApplicationKey1, HardwareKeys.ApplicationKey2, HardwareKeys.ApplicationKey3, HardwareKeys.ApplicationKey4, HardwareKeys.ApplicationKey5, HardwareKeys.ApplicationKey6 }; // HardwareButtonクラスを生成し、 // ハードウェアボタンが押下された時、 // 関連付けたフォームをアクティブにする様設定を行う for (int i = 0; i < hwbs.Length; i++) { hwbs[i] = new HardwareButton(); hwbs[i].AssociatedControl = this; hwbs[i].HardwareKey = hwKeys[i]; } }
ハードウェアボタンを離すとKeyUpイベントが発生し、先程関連付けを行ったOnKeyUpメソッドがコールされます。
private void OnKeyUp(object sender, KeyEventArgs e) { switch ((HardwareKeys)e.KeyCode) { case HardwareKeys.ApplicationKey1: statusBar1.Text = "Button 1 pressed."; break; case HardwareKeys.ApplicationKey2: statusBar1.Text = "Button 2 pressed."; break; case HardwareKeys.ApplicationKey3: statusBar1.Text = "Button 3 pressed."; break; case HardwareKeys.ApplicationKey4: statusBar1.Text = "Button 4 pressed."; break; case HardwareKeys.ApplicationKey5: statusBar1.Text = "Button 5 pressed."; break; case HardwareKeys.ApplicationKey6: statusBar1.Text = "Button 6 pressed."; break; default: break; } }
端末によって実際に実装されているハードウェアボタンの数が異なりますので、筆者の所有しているemobileのS11HT(EMONSTER)を利用して、上記のサンプルコードを用いてテストを行った所、IEボタンを押下するとアプリケーションキー3、OKボタンはアプリケーションキー4のキーイベントが発生していました。
関連記事
Windows Mobile(.NET Compact Framework)を使ってアプリ開発する際に逆引きとしてお使いください。