Windows 形成随机定时数学测验 c#

Windows forms Random Timed Math quiz c#

我的问题是我想设置一个最大数量限制,用户会像示例一样提出最多 2 个问题,而我的程序只会显示随机问题 2 次,但它会不断生成数字我认为我的问题是通过将文本框更改为 int 以及将其放置在何处我是 windows 的新手,第一个按钮生成随机问题,第二个按钮应该做同样的事情,但每次用户点击时都会减去一些问题我尝试了很多operationbox供用户选择操作(+,-,*,/),范围框是随机数的范围。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            rangebox1.Items.Add("[1,100]");
            rangebox1.Items.Add("[1,500]");
            rangebox1.Items.Add("[1,1000]");
            Operationbox1.Items.Add("+");
            Operationbox1.Items.Add("-");
            Operationbox1.Items.Add("*");
            Operationbox1.Items.Add("/");
        }
      
        int[] Rand(int v)
        {

            Random r = new Random();
        int a = r.Next(1,v);
            int b = r.Next(1,v);
            int[] N = {Math.Max(a,b) , Math.Min(a,b)};
            return N;
        
        }
        void generate()
        {
            int range = 0;
            switch (rangebox1.SelectedIndex)
            { 
                case 0:
                    range = 100;
                    break;
                case 1:
                    range = 500;
                        break;
                case 2:
                    range = 1000;
                        break;
                default:
                    MessageBox.Show("Put a range !");
                    break;
            
            }
            int[] numbers = Rand(range);
            switch (Operationbox1.SelectedIndex)
            { 
                case 0:
                    questionlbl1.Text = string.Format("{0} + {1} =",numbers[0],numbers[1]);
                    break;
                case 1:
                    questionlbl1.Text = string.Format("{0} - {1} =" , numbers[0], numbers[1]);
                    break;
                case 2:
                    questionlbl1.Text = string.Format("{0} * {1} =" , numbers[0], numbers[1]);
                    break;
                case 3:
                    questionlbl1.Text = string.Format("{0} / {1} =" , numbers[0], numbers[1]);
                    break;
                default:
                    MessageBox.Show("Please insert a operation");
                    break;
            }
        
        }
        void numberquest()
        {
            int numofquestionleft = Convert.ToInt32(numofquest1.Text);
            int r = int.Parse(numofquest1.Text);
            if (numofquestionleft > 0) generate();
            numofquestionleft--;

        }

        private void genbutton1_Click(object sender, EventArgs e)
        {
            generate();
            
        }

      
        private void button1_Click(object sender, EventArgs e)
        {
            numberquest();
        }
    }
}

据我了解你的问题,你遇到了 numofquestionleft 变量的问题,你想限制用户最多只能请求两个数字。你需要修改你的代码。你这样做是行不通的。一种解决方案可能是,

声明numofquestionleft为class级。

 public partial class Form1 : Form
{
   int numofquestionleft = 2; //here
    public Form1()
    {

你的 numberquest() 方法看起来像

 void numberquest()
    {
        
        if (numofquestionleft > 0)
           {
             generate();
           }
        numofquestionleft--;
        //You can use the textBox to communicate with user about number of turns left 
        //as
        numofquest1.Text ="Request left " +numofquestionleft;

    }

但是如果你仍然想从文本框读取最大请求,那么限制用户只能发出两个请求的目的就失去了(用户可能输入其他数字,在这种情况下你需要验证输入),而且,你需要想办法读取一次数据。 希望能帮助到你。