2D Textbox数组导致早期循环退出

时间:2014-08-31 08:11:51

标签: c# arrays

我一直在寻找一段时间,我无法找到任何可以帮助我解决问题的事情,但如果我错过了什么就很抱歉。

所以对于学校我们必须学习VB并制作游戏,我选择制作数独游戏。我发现VB很容易理解,所以我决定尝试不同的语言,看看它是否相同。 C#是我的选择。我决定重新开始数独游戏并将其与我的VB游戏进行比较。

在VB代码中,我能够从代码中构成构成9x9网格的所有文本框的数组:

For Y = 0 to 8
    For X = 0 to 8

    Grid(X, Y) = New Windows.Forms.TextBox
        Pencil(X, Y) = New Windows.Forms.TextBox
        With Grid(X, Y)
            .BackColor = Grid(X, Y).BackColor
            .Name = Asc(97 + X) & Y + 1
            .Location = New System.Drawing.Point(35 + 50 * X + (FindBox(X) - 1) * 15, 50 + 50 * Y + (FindBox(Y) - 1) * 15)
            .Size = New System.Drawing.Size(50, 50)
            .Multiline = True
            .MaxLength = 1
            .Font = New Font(Grid(X, Y).Font.Name, Grid(X, Y).Font.Size + 10)
            .TextAlign = HorizontalAlignment.Center
            .TabIndex = (X + 1) + (Y * 9) + 1
            .BorderStyle = BorderStyle.FixedSingle
        End With
        Me.Controls.Add(Grid(X, Y))
    next
next

这意味着我可以轻松地将数独文本框称为数组中的网格坐标。我试图在C#中复制它并几乎立即遇到问题

public partial class Form1 : Form
{
    TextBox[,] Grid = new TextBox[8,8];
    public Form1()
    {
        InitializeComponent();
    }



    private void Form1_Load(object sender, EventArgs e)
    {
        for (int Y = 0; Y < 9; Y++)
        {
            for (int X = 0; X < 9; X++)
            {
                TextBox TBox = new TextBox();
                Grid[X, Y] = TBox;
                TBox.Location = new Point(50 + X * 100, 50 + Y * 50);
                this.Controls.Add(TBox);
            }
        }
    }

此代码运行,但由于某种原因它只运行到Y = 7,然后停止并且不再循环。此代码工作正常,直到我尝试添加任何链接文本框的数组(在这种情况下Grid [X,Y] = TBox)。我在没有使用TBox的情况下尝试过它(直接使用阵列,但同样的问题仍然存在)。

只是想知道是否有人可以告诉我为什么添加线&#34; Grid [X,Y] = TBox;&#34;可以完全破坏嵌套的for循环。

提前致谢,对不起,如果我说不够/说得太多了。

2 个答案:

答案 0 :(得分:1)

在数组的上下文中,C#和VB.NET之间存在重要差异。只是一个简单的例子。在C#中,以下数组恰好有10个元素,允许的索引从0到9:

int[] array= new int[10];

在VB.NET中,以下数组有11个元素,允许的索引从0到10:

Dim array(10) as Integer

您将代码从VB.NET转换为C#而不考虑此差异,这就是您遇到问题的原因。要解决此问题,您应该使用:

TextBox[,] Grid = new TextBox[9,9];

而不是:

TextBox[,] Grid = new TextBox[8,8];

答案 1 :(得分:0)

它不会停止。你得到一个IndexOutOfRangeException
改变这个

new TextBox[8,8]

到这个

new TextBox[9,9]

或制作for循环&#34;&lt; 8&#34;