手順 5: 各壁の MouseEnter イベント ハンドラーの追加
ユーザーのマウス ポインターが壁に触れるたびにスタート地点に戻されるようにすると、より楽しいやりがいのある迷路ゲームになります。詳しく読み進める前に、その方法について考えてみましょう。
このトピックのビデオ版については " " を参照してください。
各壁の MouseEnter イベント ハンドラーを追加するには
Windows フォーム デザイナーに移動し、新しく追加したいずれかの壁をクリックします。
[プロパティ] ウィンドウに移動し、[イベント] アイコンをクリックしてその壁のイベントを表示します。MouseEnter イベントが表示されるまで下にスクロールします。ダブルクリックする代わりに、「wall_MouseEnter」というテキストを入力し、Enter キーを押します。[イベント] アイコンと [プロパティ] ウィンドウは次のように表示されます。
イベントのアイコン
MouseEnter イベントが表示された [プロパティ] ウィンドウ
[!メモ]
[プロパティ] ウィンドウのイベント テーブルに直接イベント名を入力すると、IDE でその名前のイベント ハンドラーを作成してコントロールのイベントに関連付けることができます。多くの場合、論理的な名前であることから IDE でイベント名を選択しがちですが、名前を使用した方が、他の人が見ても読みやすく理解しやすいコードになります。IDE でイベント ハンドラーの名前を選択する場合、コントロールの名前とイベントの名前が使用されます。ここでは、既定の名前を変更していないため、壁の名前は label4、label18、label25 などのようになっています。そのため、label12 という壁をクリックした場合、イベント ハンドラーに label12_MouseEnter という名前が付けられます。wall_MouseEnter という名前を入力することによって、その名前をより適切な名前にすることができます。これは、このチュートリアルで後ほど行うように、複数のコントロールに 1 つのイベント ハンドラーを使用する場合に特に重要になります。
Enter キーを押すと、IDE によって新しいイベント ハンドラーが追加され、その壁の MouseEnter イベントに関連付けられます。コード エディターに次のような新しいコードが追加されます。Visual Basic の場合、コードの Label8 の部分は、指定したラベルに応じて異なります。
Private Sub wall_MouseEnter() Handles Label8.MouseEnter End Sub
private void wall_MouseEnter(object sender, EventArgs e) { }
次に、MoveToStart() メソッドの呼び出しと、その説明のコメントを追加します。まず、メソッドに移動し、MoveToStart() というステートメントを追加します。IntelliSense ウィンドウが開き、次のように表示されます。
IntelliSense ウィンドウ
MoveToStart() メソッドは、前の手順で追加したときに、IDE によって IntelliSense ウィンドウに追加されています。追加した XML コメントはツールヒントに表示されます。これは、メソッドが多いプログラムを記述するときに役立ちます。
Tab キーを押して、IntelliSense でメソッド名を完成させます。Visual C# コードを記述している場合は、ステートメントの最後に忘れずにセミコロン (;) を追加してください。次に、ステートメントの上にコメントを追加します。コードは次のようになります。Visual Basic の場合、コードの Label8 の部分は、指定したラベルに応じて異なります。
Private Sub wall_MouseEnter() Handles Label8.MouseEnter ' When the mouse pointer hits a wall or enters the panel, ' call the MoveToStart() method. MoveToStart() End Sub
private void wall_MouseEnter(object sender, EventArgs e) { // When the mouse pointer hits a wall or enters the panel, // call the MoveToStart() method. MoveToStart(); }
プログラムを保存し、実行します。イベント ハンドラーを関連付けた壁の上にマウス ポインターを移動します (選択した壁を忘れてしまった場合は、各壁の上にマウス ポインターを移動して該当する壁を見つけます)。その壁に触れると、マウス ポインターがスタート地点に戻されます。
次に、残りの壁についても同じ操作を行います。それぞれの壁に対して同じ MouseEnter イベント ハンドラーを記述することもできますが、それだと時間がかかるうえ、プログラムに同じ複数のコード行が含まれることになり、変更が困難になります。IDE では、それよりも簡単な方法で、同じイベント ハンドラーをすべての壁に関連付けることができます。
Windows フォーム デザイナーに移動し、[編集] メニューの [すべて選択] をクリックします。
Ctrl キーを押しながら Finish ラベルをクリックして選択を解除します。すべての壁とパネルが選択された状態になります。
次に、[プロパティ] ウィンドウのイベント テーブルに移動します。下にスクロールして MouseEnter イベントを見つけ、その横にあるエディット ボックスをクリックします。ドロップダウン矢印が表示されます。矢印をクリックすると、このイベントに対して選択できる、プログラムのすべてのイベント ハンドラーの一覧が表示されます。ここでは、次の図に示すように、前に追加した finishLabel_MouseEnter イベント ハンドラーと、この手順で記述した wall_MouseEnter イベント ハンドラーが表示されます。
MouseEnter イベントとそのイベント ハンドラー
[wall_MouseEnter] を選択します (別のイベント ハンドラーを選択してしまった場合や誤って新しく追加してしまった場合は、すべての壁とパネルをもう一度選択してから、適切なメソッドを選択できます)。
これで、より楽しい迷路ゲームになりました。保存し、実行してみてください。ポインターが壁に触れたり、迷路の外に移動してから戻したりすると、迷路のスタート地点に自動的にポインターが移動します。
続行または確認するには
チュートリアルの次の手順に進むには、「手順 6: SoundPlayer の追加」を参照してください。
チュートリアルの前の手順に戻るには、「手順 4: ゲームを再開するメソッドの追加」を参照してください。