Step 4: Add a Click Event Handler to Each Label

匹配游戏的运行原理如下所示:

  1. 当玩家选择一个带有隐藏图标的方块时,程序会通过将图标颜色更改为黑色来向玩家显示该图标。

  2. 然后玩家选择另一个隐藏的图标。

  3. 如果图标互相匹配,则它们保持可见。如果不匹配,则两个图标都会再次隐藏。

为了使程序按此方式运行,你需要添加一个 Click 事件处理程序以更改所选择的标签的颜色。

向每个标签添加一个 Click 事件处理程序

  1. 在“Windows 窗体设计器”中打开窗体。在解决方案资源管理器中,选择 Form1.cs 或 Form1.vb。在菜单栏上,依次选择**“视图”->“设计器”**。

  2. 选择第一个标签控件以选中它。然后,按住 Ctrl 键选择其他每个标签,以将它们选中。确保选中每个标签。

  3. 选择**“属性”窗口中工具栏上的“事件”按钮,在“属性”窗口中查看“事件”页面。向下滚动到“Click”**事件,在框中输入 label_Click,如下图所示。

    显示 Click 事件的“属性”窗口

    显示 Click 事件的“属性”窗口

  4. 按 Enter 键。IDE 将称为 label_Click() 的 Click 事件处理程序添加到代码中,并将其挂钩到窗体上的每个标签。

  5. 填写其余代码,如下所示:

    ''' <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() 代码。否则,你将得到重复的代码块。

    说明说明

    你可能发现事件处理程序顶部的 object sender 与Tutorial 2: Create a Timed Math Quiz教程中使用的相同。这是因为你将不同的标签控件 Click 事件与一个事件处理程序方法挂钩,因此无论用户选择哪个标签,都调用同一方法。该事件处理程序方法需要知道选择了哪个标签,以便使用名称“sender”标识该标签控件。该方法的第一行通知程序,它并不是一般的对象,而是专门的标签控件,而且它使用名称“clickedLabel”访问标签的属性和方法。

    该方法首先检查是否已将**“clickedLabel”成功从对象转换(强制转换)为标签控件。如果不成功,其值为 null (C#) 或 Nothing (Visual Basic),你不需要执行该方法中的其余代码。接下来,该方法使用标签的“ForeColor”**属性检查选择的标签的文本颜色。如果标签的文本颜色为黑色,则表示已选择该图标并且该方法执行完毕。(这就是 return 语句的作用:它通知程序停止执行该方法。)否则,表示图标尚未被选择,因此程序将标签的文本颜色更改为黑色。

  6. 在菜单栏上依次选择**“文件”->“全部保存”以保存你的进度,然后在菜单栏上选择“调试”->“开始调试”**以运行程序。你应该看到一个背景为蓝色的空窗体。在窗体中选择任意单元格,其中一个图标应变为可见。继续在窗体中选择不同位置。当选择图标时,它们应显示。

继续或查看