如何在c#中随机填充复选框-Visual Studio [重复]
Posted
技术标签:
【中文标题】如何在c#中随机填充复选框-Visual Studio [重复]【英文标题】:How to randomly fill checkboxes in c# - Visual Studio [duplicate] 【发布时间】:2017-03-06 17:08:13 【问题描述】:所以这是我关于堆栈溢出的第一个问题。我正在开发一个鼓音序器,并希望实现一个按钮来随机填充 80 个表示触发鼓声的复选框。目前我只随机填充 80 个盒子中的一个,但我希望每个盒子都有随机填充的机会。我的代码的第一部分只是清除当前选择。这是我在以下代码中的尝试:
private void button4_Click(object sender, EventArgs e)
List<CheckBox> Checkboxlist = new List<CheckBox>();
foreach (CheckBox control in this.Controls.OfType<CheckBox>())
Checkboxlist.Add(control);
control.Checked = false;
for (int i = 0; i <= 200; i++)
var random = new Random();
var r = random.Next(0, Checkboxlist.Count);
var checkbox = Checkboxlist[r];
checkbox.Checked = true;
感谢您的收看!
【问题讨论】:
复选框列表[r].Checked = true;这样做 将var random = new Random();
移出循环,否则您将得到随机序列严重歪斜
【参考方案1】:
不要在循环内创建new Random()
。 random 最好声明一次,最好的方法是创建为静态成员。
private static Random random = new Random(); // Class member
private void button4_Click(object sender, EventArgs e)
List<CheckBox> Checkboxlist = new List<CheckBox>();
foreach (CheckBox control in this.Controls.OfType<CheckBox>())
Checkboxlist.Add(control);
control.Checked = false;
for (int i = 0; i <= 200; i++)
var r = random.Next(0, Checkboxlist.Count);
var checkbox = Checkboxlist[r];
checkbox.Checked = true;
原因是:
随机数生成从种子值开始。如果重复使用相同的种子,则会生成相同的数字序列。产生不同序列的一种方法是使种子值与时间相关,从而为每个新的 Random 实例产生不同的序列。默认情况下,Random类的无参构造函数使用系统时钟来生成它的种子值,
Source
快速的 for 循环导致 Random 使用相同的种子创建,因此 Next
函数返回相同的数字系列的第一个值。
【讨论】:
更好的是,将其移出事件处理程序 太棒了!得到它的工作!非常感谢大家!!! 最好将检查放在第一个 foreach 循环中:control.Checked = random.Next(0,99)>=50。 //(例如 50% 待检查)【参考方案2】:要在所有情况下检查并更改为随机值,这可能对您有用。
private void button4_Click(object sender, EventArgs e)
List<CheckBox> Checkboxlist = new List<CheckBox>();
foreach (CheckBox control in this.Controls.OfType<CheckBox>())
Checkboxlist.Add(control);
control.Checked = false;
Random r = new Random();
int g = 0;
for ( int i = 0; i < Checkboxlist.Length; i++)
g = r.Next(0,1);
if(g ==1)
Checkboxlist[i].Checked = true;
【讨论】:
【参考方案3】:您应该将 Random 声明移出 for 循环:
var random = new Random();
for (int i = 0; i <= 200; i++)
var r = random.Next(0, Checkboxlist.Count);
var checkbox = Checkboxlist[r];
checkbox.Checked = true;
【讨论】:
以上是关于如何在c#中随机填充复选框-Visual Studio [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual C# 中将选定行从 DataGridView 移动到另一个
调试由 C# Visual Studio 2010 插件导入的 C++ dll