Select 并在每次单击按钮时显示一个随机分组框

Select and display a random group box each time a button is clicked

我正在制作一个问答游戏,其中一个关卡将填空。在这个关卡中,我布置了 10 个不同的组框,每个组框都有一个标签和文本框。每次单击下一个按钮时,我希望能够随机 select 一个不同的组框。单击检查按钮以检查文本框中的用户答案并更改分数变量后,将出现下一个按钮。我需要确保同一个组框不会出现两次。

private void frmLevel1_Load(object sender, EventArgs e)
    {
        groupBoxList.Clear();
        btnNext.Hide();
        this.BackgroundImage = gameClass.background;

        groupBoxList.Add(groupBox1);
        groupBoxList.Add(groupBox2);
        groupBoxList.Add(groupBox3);
        groupBoxList.Add(groupBox4);
        groupBoxList.Add(groupBox5);
        groupBoxList.Add(groupBox6);
        groupBoxList.Add(groupBox7);
        groupBoxList.Add(groupBox8);
        groupBoxList.Add(groupBox9);
        groupBoxList.Add(groupBox10);

        foreach (GroupBox box in groupBoxList) 
        {
            box.Hide();

        }

        Random groupBoxChooser = new Random(); }

抽取幸运数字需要Random.Next()

var luckyNumber = groupBoxChooser.Next(0,groupboxList.Count);

如果您希望它也适用于其他方法,您应该将随机数选择器设置为一个字段而不是局部变量,因此将此行从 Form Load 事件移到 class 中:

Random groupBoxChooser = new Random();

然后,您需要 indexer 来访问列表中的一个项目

groupboxList[luckyNumber].Show();

由于它仍然不适合你,这里是我的完整代码:

using System;
using System.Collections.Generic;
using System.Windows.Forms;

namespace GroupBoxRnd
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        IList<GroupBox> groupboxList = new List<GroupBox>();
        Random groupBoxChooser = new Random();

        private void Form1_Load(object sender, EventArgs e)
        {
            // Find all group boxes
            foreach (Control control in Controls)
            {
                if (control.GetType() == typeof(GroupBox))
                    groupboxList.Add((GroupBox)control);
            }

            // Hide all of them
            foreach (GroupBox box in groupboxList)
            {
                box.Hide();
            }

            // Show a random one
            var luckyNumber = groupBoxChooser.Next(0, groupboxList.Count);
            groupboxList[luckyNumber].Show();
        }
    }
}