教程:向数学测验 WinForms 应用中添加数学题

在本系列的四个教程中,你将创建一个数学测验。 测验包含四个随机数学问题,测验者需要尝试在指定的时间内回答这些问题。

控件使用 C# 或 Visual Basic 代码。 在此第二个教程中,你将添加基于随机数的数学题的代码,从而让测验变得有挑战性。 还会创建一个名为 StartTheQuiz() 的方法来填充问题。

在第二个教程中,你将了解如何:

  • 编写代码以创建用于数学题的 Random 对象。
  • 为开始按钮添加事件处理程序。
  • 编写代码以开始测验。

先决条件

本教程基于前面的教程创建数学测验 WinForms 应用构建。 如果你尚未完成该教程,请先完成该教程。

创建随机加法问题

  1. 在你的 Visual Studio 项目中,选择“Windows 窗体设计器”。

  2. 选择窗体“Form1”。

  3. 在菜单栏上,选择“视图”>“代码” 。 此时将显示 Form1.cs 或 Form1.vb(具体取决于你所使用的编程语言),以便你查看窗体背后的代码。

  4. 通过在代码顶部附近添加 new 语句来创建一个 Random 对象。

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    

重要

使用此页右上角的编程语言控件查看 C# 代码片段或 Visual Basic 代码片段。

Programming language control for Microsoft Learn

可以使用与此类似的 new 语句创建按钮、标签、面板、OpenFileDialogs、ColorDialogs、SoundPlayers、Randoms,甚至是窗体。 这些项称为“对象”。

运行程序时,窗体将启动。 窗体背后的代码将创建一个 Random 对象并将其命名为“randomizer”。

你的测验需要变量来存储其为每个问题创建的随机数字。 使用变量前,请声明这些变量,也就是列出它们的名称和数据类型。

  1. 将两个整型变量添加到窗体,并将它们分别命名为“addend1”和“addend2”。

    注意

    整数变量在 C# 中表示为“int”,在 Visual Basic 中表示为“Integer” 。 这种变量可以存储从 -2147483648 到 2147483647 的正负数,并仅能存储整数而不能存储小数。

    应使用与添加 Random 对象相似的语法来添加整数变量,如下面的代码所示。

    // Create a Random object called randomizer 
    // to generate random numbers.
    Random randomizer = new Random();
    
    // These integer variables store the numbers 
    // for the addition problem. 
    int addend1;
    int addend2;
    

  1. 添加名为 StartTheQuiz() 的方法。 此方法使用 Random 对象的 Next() 方法来为标签生成随机数字。 StartTheQuiz() 最终将填充所有问题,然后启动计时器,因此请将此信息添加到摘要注释中。 该函数应类似于以下代码。

    /// <summary>
    /// Start the quiz by filling in all of the problems
    /// and starting the timer.
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    }
    

对 Random 对象使用 Next() 方法时(例如,在调用 randomizer.Next(51) 时),将获得一个小于 51(或介于 0 和 50)的随机数。 此代码将调用 randomizer.Next(51),以便两个随机数相加的答案介于 0 和 100。

详细了解这些语句。

plusLeftLabel.Text = addend1.ToString();
plusRightLabel.Text = addend2.ToString();

这些语句设置“plusLeftLabel”和“plusRightLabel”的“Text”属性,以便它们显示两个随机数。 标签控件以文本格式显示值,并且在编程中,字符串保存文本。 每个整数的 ToString() 方法都会将整数转换为标签可以显示的文本。

创建随机减法、乘法和除法题

下一步是声明变量并为其他数学题提供随机值。

  1. 在加法题变量后,向窗体中添加其余数学题的整数变量。 代码应类似于以下示例。

    public partial class Form1 : Form
    {
        // Create a Random object called randomizer 
        // to generate random numbers.
        Random randomizer = new Random();
    
        // These integer variables store the numbers 
        // for the addition problem. 
        int addend1;
        int addend2;
    
        // These integer variables store the numbers 
        // for the subtraction problem. 
        int minuend;
        int subtrahend;
    
        // These integer variables store the numbers 
        // for the multiplication problem. 
        int multiplicand;
        int multiplier;
    
        // These integer variables store the numbers 
        // for the division problem. 
        int dividend;
        int divisor;
    

  1. 通过添加以下代码来修改 StartTheQuiz() 方法,以“Fill in the subtraction problem”注释开头。

    /// <summary>
    /// Start the quiz by filling in all of the problem 
    /// values and starting the timer. 
    /// </summary>
    public void StartTheQuiz()
    {
        // Fill in the addition problem.
        // Generate two random numbers to add.
        // Store the values in the variables 'addend1' and 'addend2'.
        addend1 = randomizer.Next(51);
        addend2 = randomizer.Next(51);
    
        // Convert the two randomly generated numbers
        // into strings so that they can be displayed
        // in the label controls.
        plusLeftLabel.Text = addend1.ToString();
        plusRightLabel.Text = addend2.ToString();
    
        // 'sum' is the name of the NumericUpDown control.
        // This step makes sure its value is zero before
        // adding any values to it.
        sum.Value = 0;
    
        // Fill in the subtraction problem.
        minuend = randomizer.Next(1, 101);
        subtrahend = randomizer.Next(1, minuend);
        minusLeftLabel.Text = minuend.ToString();
        minusRightLabel.Text = subtrahend.ToString();
        difference.Value = 0;
    
        // Fill in the multiplication problem.
        multiplicand = randomizer.Next(2, 11);
        multiplier = randomizer.Next(2, 11);
        timesLeftLabel.Text = multiplicand.ToString();
        timesRightLabel.Text = multiplier.ToString();
        product.Value = 0;
    
        // Fill in the division problem.
        divisor = randomizer.Next(2, 11);
        int temporaryQuotient = randomizer.Next(2, 11);
        dividend = divisor * temporaryQuotient;
        dividedLeftLabel.Text = dividend.ToString();
        dividedRightLabel.Text = divisor.ToString();
        quotient.Value = 0;
    

此代码在 Random 类的 Next() 方法的使用方式上与加法题略有不同。 当您为 Next() 方法赋予两个值时,它会选取一个大于等于第一个值但小于第二个值的随机数。

通过将 Next() 方法与两个参数一起使用,可以确保减法题的答案是正数,乘法题答案的最大值为 100,而除法题的答案不是分数。

为开始按钮添加事件处理程序

在本部分中,你将添加代码,以便在选择“开始”按钮时开始测验。 为响应按钮选择等事件而运行的代码称为事件处理程序。

  1. 在“Windows 窗体设计器”中,双击“开始测验”按钮,或选择该按钮并按 Enter 键 。 此时将显示窗体的代码,并显示新方法。

    这些操作将向“开始”按钮添加一个 Click 事件处理程序。 当测验者选择此按钮时,应用将运行你要添加到此新方法中的代码。

  2. 添加以下两个语句,以使事件处理程序开始测验。

    private void startButton_Click(object sender, EventArgs e)
    {
        StartTheQuiz();
        startButton.Enabled = false;           
    }
    

第一个语句将调用新的 StartTheQuiz() 方法。 第二个语句将“startButton”控件的“Enabled”属性设置为 false,从而使测验者在测验期间不能选择此按钮 。

运行应用

  1. 保存代码。

  2. 运行应用,然后选择“开始测验”。 随即出现随机数学题,如以下屏幕截图所示。

    Screenshot that shows random values in all four math problems. The Start the quiz button appears dimmed.

后续步骤

前往下一教程,将计时器添加到数学测验中并检查用户答案。