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
如果您将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)命名以数字结尾的控件(或一些类似的约定),然后使用反射来找到正确的控件并获得其值。
实际上没有任何理由不能创建控件并将它们存储在各种集合类中-不仅仅是数组。
我会考虑将它们放入某种反映数独网格结构的结构化集合中。
您可以动态地创建控件并将其放置在表单上,也可以将它们保存在集合中。