数独使用TabIndex绘制3 * 3方格

时间:2017-01-17 18:59:52

标签: c# sudoku

我们目前正在努力完成一项功课。 老师给我们的任务是制作由文本框组成的类似数独的WFA应用程序。 我已经做了一行和colummns highlighed,但我需要突出显示子方块。 这是我的代码:

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

        }
    }

以下是表格形式:

image-before

这就是我想要的样子:

image-after

谢谢,fusionekk。

2 个答案:

答案 0 :(得分:2)

您可以将您的sudoku分成3x3 quares,并在运行突出显示代码之前手动将每个文本框或(rowindex,columnindx)的每个索引元组分配给其中一个。然后突出显示同一方块中的所有文本框。

或者您可以尝试找出一个数学属性,任何给定方块的所有索引元组都有共同点,并突出显示共享该属性的所有文本框。

答案 1 :(得分:2)

看一下下表:

Table

现在假设i将是我们的行索引,j将是我们的列索引。因此,位置i = 3j = 5将是

Highlited

现在更好地看一下我们的表格:它分为3x3个正方形的扇区,它有六行六列。

如果我们将行或列索引除以3,我们会得到一个0到2之间的数字(因为我们的最大ij是6 - 在你的情况下,它介于0和0之间) 3,因为你的指数达到9)。

在下图中,您可以更好地了解此值如何更改

enter image description here

所以你可以做的是获取i的行(j)和列(SelectedItem)的索引并将它们除以3。

一些例子:

i = 1& j = 3:

  • i / 3< = 1,这使我们得到了表格的顶部;
  • j / 3< = 1,这使我们离开了桌子的左侧;
  • 合并两个结果,您将拥有表格的左上角一面

i = 4& j = 4:

  • 1< i / 3< = 2,这使我们得到了表格的底部;
  • 1< j / 3< = 2,这使我们离开了桌子的右侧;
  • 合并两个结果,您将拥有表格的右下角一面