【问题标题】:C# - loading text boxes with a foreach loopC# - 使用 foreach 循环加载文本框
【发布时间】:2013-02-15 21:53:24
【问题描述】:

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

    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++;
            }                
        }
    }

现在这会加载我论坛上的所有文本框,这很好,但是它会在所有文本框中加载相同的数字。这是一个强力球程序,我需要将数组加载到盒子中:

文本框1 = 强力球5[0]; 文本框2 = 强力球5[1]; 等等,等等。

我一共要加载 5 个盒子。我们得出的结论是,将相同的数字加载到所有这些中的原因是 foreach 循环的位置不允许加载数组和增加计数器。我尝试过移动它,甚至制作自己的方法,但是当我按照自己的方法进行操作时,我得到一个索引超出范围错误。所以我有点不知道该怎么做。任何帮助将不胜感激。如果您需要更多信息,我会尽力更新,以满足每个人的需求。再次感谢您的宝贵时间。

【问题讨论】:

  • 这是 WinForms、ASP.NET 还是 WPF/Silverlight?
  • WinForms,抱歉。
  • 我没有得到这个用户界面。您正在使用文本框来允许用户编辑彩票号码吗?使用标签或列表框或列表视图。如果您需要一组标签,那么只需在您的代码中创建一个标签,而不是稍后尝试找到标签。顺便说一句,强力球彩票不允许两次相同的号码,您需要洗牌。
  • SeventhLogic 为什么发布与昨天发布的代码相同的代码..?链接已关闭stackoverflow.com/questions/14843192/… Didn't the answer there work for you 我认为您确实需要查看您拥有的代码并开始调试现有代码以及昨天提供给您的代码.. i++; 需要在foreach 循环`我建议看看如何在 foreach 循环和 While 循环中增加变量..
  • 我同意这一点,我试过了。我从中得到的只是一个超出范围的索引错误。我认为答案会奏效,在与我的班级和教授坐下来后,我们想出了一个解决方案,但我还没有机会实施它。最后一个问题已关闭,所以我重新发布。

标签: c#


【解决方案1】:

此代码将相同的数字加载到每个文本框中 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];
}

【讨论】:

  • 也感谢您的帖子。我感谢这里提出的所有 cmets 和努力。直到今晚晚些时候我才能看到这么多,但再次感谢您!
【解决方案2】:

要匹配您的代码,您可以使用:

    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++;
    }

【讨论】:

  • 感谢您的帖子。可悲的是,我今晚要工作到很晚,所以在那之前我没有机会进行测试。
【解决方案3】:

我以前见过这个,随机类使用在主机上生成的随机数字,但是它大约每 20-30 毫秒刷新一次,所以你的“for”循环移动得如此之快,以至于随机数不会刷新,尝试将“system.threading.thread.sleep(25);”添加到您的 for 循环中。

【讨论】:

    猜你喜欢
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2014-02-19
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    相关资源
    最近更新 更多