如何制作快速程序,通过C#Windows窗体应用程序中的列表?

时间:2015-04-17 16:46:35

标签: c# list windows-forms-designer

我正在试验C#控制台应用程序中的列表,特别是随机化的int列表,其数字顺序是随机的。在这个实验中,当我按下Enter键并且显示它将停止的所有随机值时,我想要查看列表中的随机值。它按照我的意图运作: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]);

        }

    }

1 个答案:

答案 0 :(得分:0)

由于你在click事件中创建了列表创建 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]);
}

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

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