C# - 使用foreach循环加载文本框

时间:2013-02-14 00:33:27

标签: c#

我正在寻找有关如何将数组加载到某些文本框中的解决方案。我前几天发布了一个类似的问题。提供的答案很好但是现在我有了我认为在代码中定位的问题。这就是我所拥有的:

    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循环的位置不允许加载数组并且计数器增加。我已经尝试过移动它甚至制作自己的方法,但是当我按照它自己的方法执行它时,我得到一个索引超出范围错误。所以我有点迷失了该做什么。任何帮助都会受到极大的关注。如果您需要更多信息,我会尽力更新,以满足每个人的需求。再次感谢你的时间。

3 个答案:

答案 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);”。