手順 4: 各ラベルへの Click イベント ハンドラーの追加
絵合わせゲームは、次のように動作します。
プレーヤーが、アイコンが非表示になっているいずれかの四角をクリックすると、アイコンの色が黒に変更され、プレーヤーにアイコンが表示されます。
次に、プレーヤーが他の非表示のアイコンをクリックします。
アイコンが一致した場合は、表示されたままになります。一致しない場合は、両方のアイコンが再び非表示になります。
プログラムをこのように動作させるには、クリックされたラベルの色を変更させる Click イベント ハンドラーを追加します。
各ラベルに Click イベント ハンドラーを追加するには
Windows フォーム デザイナーに移動し、1 つ目の Label コントロールをクリックして選択します。次に、Ctrl キーを押しながら他のラベルを 1 つずつクリックして選択します。すべてのラベルが選択されていることを確認します。
次に、[プロパティ] ウィンドウの [イベント] ページに移動します。Click イベントまで下へスクロールし、次の図に示すように、ボックスに「label_Click」と入力します。
Click イベントが表示された [プロパティ] ウィンドウ
Enter キーを押します。IDE により、label_Click() という名前の Click イベント ハンドラーがコードに追加され、各ラベルにフックされます。
コードの残りの部分を次のように入力します。
''' <summary> ''' Every label's Click event is handled by this event handler ''' </summary> ''' <param name="sender">The label that was clicked</param> ''' <param name="e"></param> ''' <remarks></remarks> Private Sub label_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label9.Click, Label8.Click, Label7.Click, Label6.Click, Label5.Click, Label4.Click, Label3.Click, Label2.Click, Label16.Click, Label15.Click, Label14.Click, Label13.Click, Label12.Click, Label11.Click, Label10.Click, Label1.Click Dim clickedLabel = TryCast(sender, Label) If clickedLabel IsNot Nothing Then ' If the clicked label is black, the player clicked ' an icon that's already been revealed -- ' ignore the click If clickedLabel.ForeColor = Color.Black Then Exit Sub clickedLabel.ForeColor = Color.Black End If End Sub
/// <summary> /// Every label's Click event is handled by this event handler /// </summary> /// <param name="sender">The label that was clicked</param> /// <param name="e"></param> private void label_Click(object sender, EventArgs e) { Label clickedLabel = sender as Label; if (clickedLabel != null) { // If the clicked label is black, the player clicked // an icon that's already been revealed -- // ignore the click if (clickedLabel.ForeColor == Color.Black) return; clickedLabel.ForeColor = Color.Black; } }
[!メモ]
イベント ハンドラーの上部に、計算クイズの作成に関するチュートリアルで説明されている object sender があります。単一のイベント ハンドラー メソッドに異なる Label コントロールの Click イベントをフックしたため、ユーザーがどのラベルをクリックしたかにかかわらず、同じメソッドが呼び出されます。メソッドは、どのラベルがクリックされたのかを知る必要があるため、その Label コントロールに対して sender という名前を使用します。メソッドの 1 行目は、sender が単なるオブジェクトではなく、具体的には Label コントロールであること、および clickedLabel という名前を使用してそのプロパティおよびメソッドにアクセスすることをプログラムに示します。
このメソッドは、最初に clickedLabel がオブジェクトから Label コントロールに正常に変換 (キャスト) されたかどうかをチェックします。正常に変換されなかった場合は、値が null (C#) または Nothing (Visual Basic) となり、メソッドの残りのコードは実行されません。次に、メソッドは、ForeColor プロパティを使用して、クリックされたラベルのテキストの色をチェックします。テキストの色が既に黒になっている場合は、アイコンがクリックされていたため、メソッドは実行されています (この場合、return ステートメントが、メソッドの実行を停止するようプログラムに指示します)。アイコンがクリックされていなかった場合は、そのテキストの色を黒に変更します。
プログラムを保存し、実行します。青色の背景の空のフォームが表示されます。フォーム内でクリックすると、いずれかのアイコンが表示されます。フォーム内のさまざまな場所でクリックし続けます。アイコンをクリックすると、そのアイコンが表示されます。
続行または確認するには
チュートリアルの次の手順に進むには、「手順 5: ラベルの参照の追加」を参照してください。
チュートリアルの前の手順に戻るには、「手順 3: 各ラベルへのランダムなアイコンの割り当て」を参照してください。