教程:自定义数学测验 WinForms 应用

在此系列教程中,你将生成一个数学测验。 测验包含四个随机数学问题,测验者尝试在指定时间内回答。

本教程介绍如何通过清除默认值和自定义控件的外观来增强测验。

在本教程的最后一篇教程中,你将了解如何:

  • 添加事件处理程序以清除默认 NumericUpDown 控件值。
  • 自定义测验。

先决条件

本教程基于前面的教程,从 创建数学测验 WinForms 应用开始。 如果尚未完成这些教程,请先完成这些教程。

为 NumericUpDown 控件添加事件处理程序

测验包含测验者用于输入数字的 NumericUpDown 控件。 输入答案时,首先需要选择默认值,或者手动删除该值。 通过添加 Enter 事件处理程序,可以更轻松地输入答案。 此代码选择并清除每个 NumericUpDown 控件中的当前值,只要测验接受者选择它并开始输入其他值。

  1. 选择窗体上的第一个 NumericUpDown 控件。 在 属性 对话框中,选择工具栏上的 事件 图标。

    显示“属性”对话框工具栏的屏幕截图。其中标出了一个包含闪电的图标。

    属性中,事件选项卡显示您可以对表单上所选项目进行响应的所有事件。 在这种情况下,所有列出的事件都与 NumericUpDown 控件相关。

  2. 选择“Enter”事件,输入“answer_Enter”,然后选择 Enter

    显示“属性”对话框的屏幕截图,其中选择了 Enter 事件。方法框包含answer_Enter。

    代码编辑器出现,并显示为 sum NumericUpDown 控件创建的 Enter 事件处理程序。

  3. answer_Enter 事件处理程序的方法中,添加以下代码:

    private void answer_Enter(object sender, EventArgs e)
    {
        // Select the whole answer in the NumericUpDown control.
        NumericUpDown answerBox = sender as NumericUpDown;
    
        if (answerBox != null)
        {
            int lengthOfAnswer = answerBox.Value.ToString().Length;
            answerBox.Select(0, lengthOfAnswer);
        }
    }
    

在此代码中:

  • 第一行声明该方法。 它包括名为 sender的参数。 在 C# 中,参数 object sender。 在 Visual Basic 中,它为 sender As System.Object。 此参数指的是触发其事件的对象,该对象称为发送者。 在这种情况下,发送方对象是 NumericUpDown 控件。
  • 方法中的第一行将发送者从泛型对象转换为 NumericUpDown 控件。 该行还会将名称 answerBox 分配给 NumericUpDown 控件。 窗体上的所有 NumericUpDown 控件都将使用此方法,而不只是加法问题的控件。
  • 下一行验证 answerBox 是否已成功转换为 NumericUpDown 控件。
  • if 语句中的第一行确定当前在 NumericUpDown 控件中的答案的长度。
  • if 语句中的第二行使用答案长度来选择控件中的当前值。

当测验接受者选择控件时,Visual Studio 将触发此事件。 此代码选择当前答案。 测验接受者开始输入其他答案后,将清除当前答案并将其替换为新答案。

  1. Windows 窗体设计器中,再次选择加法问题的 NumericUpDown 控件。

  2. 属性 对话框的 事件 页面中,找到 单击 事件,然后从下拉菜单中选择 answer_Enter。 此事件处理程序是您刚刚添加的。

  3. 在“Windows 窗体设计器”中,选择减法问题的 NumericUpDown 控件

  4. 属性 对话框的“事件” 页中,找到 Enter 事件,然后从下拉菜单中选择 answer_Enter。 此事件处理程序是您刚刚添加的。 对“Click”事件重复此步骤

  5. 对乘法和除法 NumericUpDown 控件重复上述两个步骤。

运行应用

  1. 保存程序并运行它。

  2. 启动测验,然后选择 NumericUpDown 控件。 将自动选择现有值,然后在开始输入其他值时清除。

    显示有四个随机数学问题的测验应用的屏幕截图。选择第一个问题的默认答案。

个性化您的测验

在本教程的最后一部分,你将探索一些自定义测验的方法,并扩展你学到的内容。

更改标签的颜色

  • 使用 timeLabel 控件的 BackColor 属性在测验中仅剩五秒时将此标签变为红色。

    timeLabel.BackColor = Color.Red;
    
  • 当测验结束时重置颜色。

为正确答案播放声音

当正确答案被输入到 NumericUpDown 控件中时,通过播放声音来提示测验者。 若要实现此功能,请为每个控件的 ValueChanged 事件编写事件处理程序。 每当测验者更改控件的值时,此类事件便会触发。

后续步骤

祝贺! 你已完成本系列教程。 已在 Visual Studio IDE 中完成这些编程和设计任务:

  • 创建了一个使用 Windows 窗体的 Visual Studio 项目
  • 添加了标签、按钮和 NumericUpDown 控件
  • 添加了计时器
  • 为控件设置事件处理程序
  • 编写 C# 或 Visual Basic 代码来处理事件

继续学习另一个教程系列,了解如何构建配对游戏。