1
我做了一个简单的WindowsFormsApplication,但我遇到了一些困难。在表单中我有10个文本框和一个按钮。该程序的目的是在单击按钮时在每个框中生成不同的编号。下面是从代码的一部分:奇怪的事情发生在WindowsFormsApplication C#
private void button1_Click(object sender, EventArgs e)
{
int p = 0;
int[] array = GeneratingArray();
foreach (Control c in tableLayoutPanel1.Controls)
{
if (c.GetType().ToString() == "System.Windows.Forms.TextBox")
{
c.Text = array[p].ToString();
p++;
}
}
}
public int GeneratingInt()
{
int random;
Contract.Ensures(Contract.Result<int>() > -11, "Array out of Bounds(-10 ; 10)");
Contract.Ensures(Contract.Result<int>() < 11, "Array out of Bounds(-10 ; 10)");
Random gnr = new Random();
random = gnr.Next(20);
return random;
}
public int[] GeneratingArray()
{
int[] array = new int[10];
int random;
for (int i = 0; i < 10; i++)
{
random = GeneratingInt();
array[i] = random;
}
return array;
}
的问题是,当我使用调试器都工作正常,但是当我开始在所有的盒子应用程序产生相同的号码。我找不到是什么原因导致这种问题,所以我问你。谢谢。
或者他可以固执并将DateTime.Now.Ticks作为Random构造函数参数中的种子传递:)不是一个好主意。 – Nyuno
非常感谢。这是问题所在。 –
@Nyuno你可能会遇到同样的问题。默认构造函数使用Environment.TickCount,但在XP上,它可以具有与DateTime.Now.Ticks相同的精度。有关详细信息,请参阅此优秀答案:http://stackoverflow.com/a/8865560/65358 –