C#分配给具有许多NumericUpdown对象的数组

时间:2011-08-04 02:38:45

标签: c# arrays object numericupdown

好吧所以我正在制作一个数独求解器以获得乐趣(是的,我知道它已经被多次制作过)所以让人们在解决之前输入值我使用了数字下降(81其中一个是准确的) 我想将所有这些分配给一个数组:

        int[,] Sudoku = new int[9, 9];

然后单击“求解”它应该做的第一件事是将所有值放在数组中:

        private void button1_Click(object sender, EventArgs e)
    {
        for (int x = 0; x < 81; x++)
        {
            for (int y = 0; y < 9; y++)
            {
                if (x-1 == 0)
                {
                    Sudoku[x - 1, y - 1] = Convert.ToInt32(numericUpDown[y].Value);
                }
                else
                {
                    Sudoku[x - 1, y - 1] = Convert.ToInt32(numericUpDown[x][y].Value);
                }
            }
        }

    }

显然你不能这样做:“numbericupdown [y]”但是那可以让你看到我想要做的事情....

sooooo想法?

谢谢, Craiggles

4 个答案:

答案 0 :(得分:1)

如果您将numericUpDown控件放入9x9网格中,就像您对结果一样,那么复制值将非常简单。

private void button1_Click(object sender, EventArgs e)
{
    for (int x = 0; x < 9; x++)
    {
        for (int y = 0; y < 9; y++)
        {
            Sudoku[x, y] = Convert.ToInt32(numericUpDown[x, y].Value);
        }
    }

}

如果控件实际上都被删除到表单上,那么不要这样做,从表单中删除它们。使用代码创建它们,以编程方式放置它们,并将它们放入二维数组中。因为这是一个学习计划,所以这是以编程方式进行GUI的好方法,而不仅仅是通过拖放操作。

答案 1 :(得分:0)

我会动态地构建/放置它们,同时将它们放入数组或列表中,但如果它们已经布局到表单上,您只需将它们添加到通用列表中即可迭代它们。 / p>

List<NumericUpDown> nums = new List<NumericUpDown>();
nums.add(numericUpDwown1);

然后你可以计算nums [1] * nums [9] ......或者其他什么

答案 2 :(得分:0)

我想我明白你在做什么......两个建议:1)将所有控件放入NumericaUpDown对象数组中。然后你可以做numericUpDown [y] .Value。否则,2)将控件命名为以数字(或某些类似约定)结尾,然后使用反射找到正确的控件并获取其值。

答案 3 :(得分:0)

实际上没有理由不能创建控件并将它们存储在各种集合类中 - 而不仅仅是数组。

我会考虑将这些集合放入某种结构集合中,以反映数独网格的结构。

您可以动态创建控件并将其放置在表单上,​​也可以将它们保存在集合中。