2D文本框数组导致循环提前退出
本文关键字:循环 退出 文本 数组 2D | 更新日期: 2023-09-27 18:20:16
我找了一段时间,找不到任何能帮助我解决问题的东西,但如果我错过了什么,很抱歉。
所以在学校里,我们必须学习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的情况下尝试过(直接使用数组,但同样的问题仍然存在)。
只是想知道是否有人能启发我,为什么添加"Grid[X,Y]=TBox;"一行会完全破坏嵌套的for循环。
提前谢谢,如果我说得不够/说得太多,我很抱歉。
在数组的上下文中,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];
它不会停止。您得到IndexOutOfRangeException
更改此
new TextBox[8,8]
到这个
new TextBox[9,9]
或者使for循环为"<8"