c#赋值给一个有许多NumericUpdown对象的数组

本文关键字:许多 NumericUpdown 对象 数组 一个 赋值 | 更新日期: 2023-09-27 18:04:22

我在做一个有趣的数独解算器(是的,我知道它已经做了很多次了)所以为了让人们在解之前输入这些值我使用了数字上下(准确地说是81个)我想把它们都赋值给一个数组

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

然后点击"solve"它要做的第一件事就是把所有的值放到数组中

        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]"但这是为了让你看到我在做什么....

如此的想法吗?

谢谢,Craiggles

c#赋值给一个有许多NumericUpdown对象的数组

如果您将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);
        }
    }
}

如果控件实际上都放到表单上,那么不要这样做,从表单中删除它们。使用代码创建它们,以编程方式放置它们,并将它们放入2d数组中。因为这是一个学习程序,所以这是一个很好的实践,以编程的方式来做GUI,而不仅仅是通过拖放。

我会动态地构建/放置它们,同时将它们放入数组或列表中,但如果它们已经布局到表单中,您可以将它们添加到泛型列表中以迭代它们。

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

则可以计算nums[1]*nums[9]…或者任何

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

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

我会考虑将它们放入某种反映数独网格结构的结构化集合中。

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