如何制作一个快速程序来遍历 C# Windows 表单应用程序中的列表?
How do I make a quick program which goes through a list in a C# Windows Form Application?
我在 C# 的控制台应用程序中试验列表,特别是一个随机的 int 列表,它的数字顺序是随机的。在这个实验中,我想在我按下回车键时浏览列表中的随机值,当它显示所有随机值时它会停止。它按照我的预期工作:http://i.imgur.com/bNOYrZp.png[^]
Random r = new Random();
int tempValue;
List<int> number = new List<int>();
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
for (int i = 0; i < 10; i++)
{
tempValue = r.Next(0, number.Count);
Console.WriteLine(number[tempValue]);
number.RemoveAt(tempValue);
Console.ReadLine();
}
现在如何在 C# 的 Windows 表单应用程序中做类似的事情?我没有按回车键浏览列表,而是按一个按钮浏览列表,每次按下此按钮时,值的顺序都会显示在标签上。
我使用了类似的代码,但没有按预期工作。它没有遍历随机值,而是继续对值进行新的排序,每次我单击按钮时它都会这样做。我想要它做的是遍历随机值,在它显示所有 10 个随机值后,没有重复,它停止。
private void button1_Click(object sender, EventArgs e)
{
List<int> number = new List<int>();
Random r = new Random();
int tempValue;
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
for (int i = 0; i < 10; i++)
{
tempValue = r.Next(0, number.Count);
label1.Text = number[tempValue].ToString();
number.Remove(number[tempValue]);
}
}
由于您将列表创建 和 for 循环放在点击事件中,它的工作 "as-coded"(显然不是您想要的)。
请记住,整个 单击处理程序都会在您每次按下按钮时运行。所以你需要在别处初始化列表,然后在点击时迭代它。类似于:
private Random rng = new Random();
private List<int> numbers = new List<int>();
private void Form_Loaded(...) //Set to Form's Loaded event
{
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
}
private void button1_click(...)
{
tempValue = rng.Next(0, number.Count);
label1.Text = number[tempValue].ToString();
number.Remove(number[tempValue]);
}
请注意,一旦列表用完,此代码将出现一些问题,无法重新初始化列表等。我将这些作为练习留给您。
另请注意,我创建了 Random
的 one 个实例并将其存储在 class 级别。通常,您希望每个 class 使用一个实例以避免播种问题(尽管在按钮单击中重新创建它在技术上可行,因为您可能无法足够快地单击按钮)。
我在 C# 的控制台应用程序中试验列表,特别是一个随机的 int 列表,它的数字顺序是随机的。在这个实验中,我想在我按下回车键时浏览列表中的随机值,当它显示所有随机值时它会停止。它按照我的预期工作:http://i.imgur.com/bNOYrZp.png[^]
Random r = new Random();
int tempValue;
List<int> number = new List<int>();
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
for (int i = 0; i < 10; i++)
{
tempValue = r.Next(0, number.Count);
Console.WriteLine(number[tempValue]);
number.RemoveAt(tempValue);
Console.ReadLine();
}
现在如何在 C# 的 Windows 表单应用程序中做类似的事情?我没有按回车键浏览列表,而是按一个按钮浏览列表,每次按下此按钮时,值的顺序都会显示在标签上。
我使用了类似的代码,但没有按预期工作。它没有遍历随机值,而是继续对值进行新的排序,每次我单击按钮时它都会这样做。我想要它做的是遍历随机值,在它显示所有 10 个随机值后,没有重复,它停止。
private void button1_Click(object sender, EventArgs e)
{
List<int> number = new List<int>();
Random r = new Random();
int tempValue;
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
for (int i = 0; i < 10; i++)
{
tempValue = r.Next(0, number.Count);
label1.Text = number[tempValue].ToString();
number.Remove(number[tempValue]);
}
}
由于您将列表创建 和 for 循环放在点击事件中,它的工作 "as-coded"(显然不是您想要的)。
请记住,整个 单击处理程序都会在您每次按下按钮时运行。所以你需要在别处初始化列表,然后在点击时迭代它。类似于:
private Random rng = new Random();
private List<int> numbers = new List<int>();
private void Form_Loaded(...) //Set to Form's Loaded event
{
number.Add(1);
number.Add(2);
number.Add(3);
number.Add(4);
number.Add(5);
number.Add(6);
number.Add(7);
number.Add(8);
number.Add(9);
number.Add(10);
}
private void button1_click(...)
{
tempValue = rng.Next(0, number.Count);
label1.Text = number[tempValue].ToString();
number.Remove(number[tempValue]);
}
请注意,一旦列表用完,此代码将出现一些问题,无法重新初始化列表等。我将这些作为练习留给您。
另请注意,我创建了 Random
的 one 个实例并将其存储在 class 级别。通常,您希望每个 class 使用一个实例以避免播种问题(尽管在按钮单击中重新创建它在技术上可行,因为您可能无法足够快地单击按钮)。