我正在寻找有关如何将数组加载到某些文本框中的解决方案。我前几天发布了一个类似的问题。提供的答案很好但是现在我有了我认为在代码中定位的问题。这就是我所拥有的:
private void btnQuickPlayNumbers_Click(object sender, EventArgs e)
{
int randCheck = 0;
Random rand = new Random();
int[] powerball5 = new int[5];
for (int i = 0; i < powerball5.Length; )
{
randCheck = rand.Next(0, 60);
while (!(powerball5.Contains(randCheck)))
{
powerball5[i] = randCheck;
foreach (Control x in this.Controls)
{
if (x is TextBox)
{
((TextBox)x).Text = powerball5[i].ToString();
}
}
i++;
}
}
}
现在这会加载我论坛上的所有文本框,这很好但是它在所有文本框中加载相同的数字。这是一个强力球程序,我需要将数组加载到框中,如下所示:
textbox1 = powerball5 [0]; textbox2 = powerball5 [1]; 等,等。
我正在尝试加载总共5个盒子。我们得出的结论是,将所有这些加载相同数字的原因是foreach循环的位置不允许加载数组并且计数器增加。我已经尝试过移动它甚至制作自己的方法,但是当我按照它自己的方法执行它时,我得到一个索引超出范围错误。所以我有点迷失了该做什么。任何帮助都会受到极大的关注。如果您需要更多信息,我会尽力更新,以满足每个人的需求。再次感谢你的时间。
答案 0 :(得分:0)
此代码将相同的数字加载到每个文本框中5次,因此您只能获得最后一个数字。
foreach (Control x in this.Controls)
{
if (x is TextBox)
{
((TextBox)x).Text = powerball5[i].ToString();
}
}
你应该更像这样构造它:
int[] whiteNumbers = DrawPowerballWhites();
// should be in its own function -- DisplayPowerballNumbers(int[] whites, int powerball)
var whiteTextboxes = this.Controls
.OfType<TextBox>()
.Where(t => IsWhiteTextbox(t))
.Select((textbox,index) => new {textbox, index});
foreach(var indexedTextBox in whiteTextboxes)
{
indexedTextbox.textbox.Text = whiteNumbers[indexedTextbox.index];
}
答案 1 :(得分:0)
要匹配您的代码,您可以使用此代码:
int randCheck = 0;
Random rand = new Random();
int[] powerball5 = new int[5];
TextBox[] textboxes = new TextBox[5];
int count = 0;
for (int i = 0; i < powerball5.Length; i++)
{
randCheck = rand.Next(0, 60);
do
{
randCheck = rand.Next(0, 60);
} while (Array.IndexOf(powerball5, randCheck) != -1);
powerball5[i] = randCheck;
}
foreach (TextBox x in this.Controls)
{
x.Text = powerball5[count].ToString();
count++;
}
答案 2 :(得分:0)
我以前见过这个,随机类使用在主机上生成的随机数字,然而它每隔20-30毫秒刷新一次,所以你的'for'循环移动速度太快,randoms不会刷新,尝试在for循环中添加“system.threading.thread.sleep(25);
”。