我正在进行一个问答游戏,其中一个级别将填补空白。在这个级别中,我已经布置了10个不同的组合框,每个组合框中都有标签和文本框。我希望每次单击下一个按钮时能够随机选择一个不同的组框。单击检查按钮后,将显示下一个按钮,以检查文本框中的用户答案并更改分数变量。我需要确保相同的组框不会出现两次。
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(); }
答案 0 :(得分:0)
您需要Random.Next()
来绘制幸运数字:
var luckyNumber = groupBoxChooser.Next(0,groupboxList.Count);
如果您希望其他方法也可以使用,则应将随机数选择器设为字段而不是局部变量,因此将此行从Form Load事件中移出到类中:
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();
}
}
}