数独使用 TabIndex 绘制 3*3 正方形
Sudoku draw the 3*3 square using TabIndex
我们目前正在努力完成一项作业。
老师给我们的任务是用文本框制作类似数独的 WFA 应用程序。
我已经突出显示了行和列,但我还需要突出显示子方块。
这是我的代码:
TextBox box = (TextBox)sender;
id = box.TabIndex;
row = Convert.ToInt32(Math.Ceiling(id / 9) * 9);
min = row - 8;
col = Convert.ToInt32((id % 9));
if (col == 0) col = 9;
col = col + 72;
tb_clear(); // function to un-highlight the clicked tb
foreach (TextBox tb in this.Controls)
{
if (tb.TabIndex == row)
{
tb.BackColor = Color.PowderBlue;
if (row != min) row--;
}
if (tb.TabIndex == col)
{
tb.BackColor = Color.PowderBlue;
col -= 9;
}
}
}
形式如下:
这就是我想要的样子:
谢谢,fusionekk。
您可以将您的数独分成 3x3 个正方形,并在 运行 您的突出显示代码之前手动将每个文本框或 (rowindex, columnindx) 的每个索引元组分配给其中一个。然后突出显示同一方块中的所有文本框。
或者您可以尝试找出一个数学 属性,任何给定正方形的所有索引元组都有共同点,并突出显示共享 属性.
的所有文本框
看看下面的table:
现在假设 i
将是我们的行索引,j
将是我们的列索引。因此,位置 i = 3
和 j = 5
将是
现在仔细看看我们的 table:它被分成 3x3 正方形的扇区,它有六行和六列。
如果我们将行或列索引除以三,我们会得到一个介于 0 和 2 之间的数字(因为我们的最大值 i
或 j
是 6 - 在你的情况下它介于0 和 3,因为你的指数上升到 9)。
在下图中,您可以更好地了解该值如何变化
所以也许你可以做的是获取 SelectedItem
的行 (i
) 和列 (j
) 的索引并将它们除以 3。
一些例子:
i
= 1 & j
= 3:
- i / 3 <= 1,这让我们得到 table;
的顶部
- j / 3 <= 1,剩下 table;
的左边
- 合并两个结果,您将得到 table
的 top-left 一侧
i
= 4 & j
= 4:
- 1 < i / 3 <= 2,剩下 table;
的底部
- 1 < j / 3 <= 2,剩下 table;
的右边
- 合并两个结果,您将得到 table
的 bottom-right 一侧
我们目前正在努力完成一项作业。 老师给我们的任务是用文本框制作类似数独的 WFA 应用程序。 我已经突出显示了行和列,但我还需要突出显示子方块。 这是我的代码:
TextBox box = (TextBox)sender;
id = box.TabIndex;
row = Convert.ToInt32(Math.Ceiling(id / 9) * 9);
min = row - 8;
col = Convert.ToInt32((id % 9));
if (col == 0) col = 9;
col = col + 72;
tb_clear(); // function to un-highlight the clicked tb
foreach (TextBox tb in this.Controls)
{
if (tb.TabIndex == row)
{
tb.BackColor = Color.PowderBlue;
if (row != min) row--;
}
if (tb.TabIndex == col)
{
tb.BackColor = Color.PowderBlue;
col -= 9;
}
}
}
形式如下:
这就是我想要的样子:
谢谢,fusionekk。
您可以将您的数独分成 3x3 个正方形,并在 运行 您的突出显示代码之前手动将每个文本框或 (rowindex, columnindx) 的每个索引元组分配给其中一个。然后突出显示同一方块中的所有文本框。
或者您可以尝试找出一个数学 属性,任何给定正方形的所有索引元组都有共同点,并突出显示共享 属性.
的所有文本框看看下面的table:
现在假设 i
将是我们的行索引,j
将是我们的列索引。因此,位置 i = 3
和 j = 5
将是
现在仔细看看我们的 table:它被分成 3x3 正方形的扇区,它有六行和六列。
如果我们将行或列索引除以三,我们会得到一个介于 0 和 2 之间的数字(因为我们的最大值 i
或 j
是 6 - 在你的情况下它介于0 和 3,因为你的指数上升到 9)。
在下图中,您可以更好地了解该值如何变化
所以也许你可以做的是获取 SelectedItem
的行 (i
) 和列 (j
) 的索引并将它们除以 3。
一些例子:
i
= 1 & j
= 3:
- i / 3 <= 1,这让我们得到 table; 的顶部
- j / 3 <= 1,剩下 table; 的左边
- 合并两个结果,您将得到 table 的 top-left 一侧
i
= 4 & j
= 4:
- 1 < i / 3 <= 2,剩下 table; 的底部
- 1 < j / 3 <= 2,剩下 table; 的右边
- 合并两个结果,您将得到 table 的 bottom-right 一侧