手順 4: 各ラベルへの Click イベント ハンドラーの追加
絵合わせゲームは、次のように動作します。
プレーヤーが、アイコンが非表示になっているいずれかの四角をクリックすると、アイコンの色が黒に変更され、プレーヤーにアイコンが表示されます。
次に、プレーヤーが他の非表示のアイコンをクリックします。
アイコンが一致した場合は、表示されたままになります。一致しない場合は、両方のアイコンが再び非表示になります。
プログラムをこのように動作させるには、クリックされたラベルの色を変更させる Click イベント ハンドラーを追加します。
各ラベルに Click イベント ハンドラーを追加するには
Windows フォーム デザイナーでフォームを開きます。ソリューション エクスプローラーで Form1.cs または Form1.vb を選択します。メニュー バーで [表示]、[デザイナー] の順にクリックします。
最初のラベル コントロールをクリックして選択します。次に、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; } }
[!メモ]
label_Click() コード ブロックを手動で入力せずにコピーして貼り付ける場合は、既存の label_Click() コードと置き換えてください。置き換えないと、コード ブロックが重複することになります。
[!メモ]
イベント ハンドラーの上部に「チュートリアル 2: 制限時間ありの計算クイズの作成」チュートリアルで使用した同じ object sender があります。単一のイベント ハンドラー メソッドに異なるラベル コントロールの Click イベントをフックしたため、ユーザーがどのラベルをクリックしたかにかかわらず、同じメソッドが呼び出されます。イベント ハンドラー メソッドは、どのラベルがクリックされたのかを知る必要があるため、そのラベル コントロールに対して sender という名前を使用します。メソッドの 1 行目は、sender が単なる汎用オブジェクトではなく、具体的にはラベル コントロールであること、さらに clickedLabel という名前を使用してラベルのプロパティとメソッドにアクセスすることをプログラムに通知します。
このメソッドは、最初に clickedLabel がオブジェクトからラベル コントロールに正常に変換 (キャスト) されたかどうかをチェックします。正常に変換されなかった場合は、値が null (C#) または Nothing (Visual Basic) となり、メソッドの残りのコードは実行されません。次に、メソッドはラベルの ForeColor プロパティを使用して、クリックされたラベルのテキストの色をチェックします。ラベルのテキストの色が黒になっている場合は、アイコンが既にクリックされていて、メソッドは実行されています (この場合、return ステートメントが、メソッドの実行を停止するようにプログラムに指示します)。アイコンがクリックされていない場合、プログラムはそのテキストの色を黒に変更します。
メニュー バーで、[ファイル]、[すべてを保存] の順にクリックして、ここまでの進捗を保存したら、[デバッグ]、[デバッグ開始] の順にクリックしてプログラムを実行します。青色の背景の空のフォームが表示されます。フォーム内で任意のセルをクリックすると、いずれかのアイコンが表示されます。フォーム内のさまざまな場所でクリックし続けます。アイコンをクリックすると、そのアイコンが表示されます。
続行または確認するには
チュートリアルの次の手順に進むには、「手順 5: ラベルの参照の追加」を参照してください。
チュートリアルの前の手順に戻るには、「手順 3: 各ラベルへのランダムなアイコンの割り当て」を参照してください。