如何制作一个快速程序来遍历 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]);
}

请注意,一旦列表用完,此代码将出现一些问题,无法重新初始化列表等。我将这些作为练习留给您。

另请注意,我创建了 Randomone 个实例并将其存储在 class 级别。通常,您希望每个 class 使用一个实例以避免播种问题(尽管在按钮单击中重新创建它在技术上可行,因为您可能无法足够快地单击按钮)。