我一直在寻找一段时间,我无法找到任何可以帮助我解决问题的事情,但如果我错过了什么就很抱歉。
所以对于学校我们必须学习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循环。
提前致谢,对不起,如果我说不够/说得太多了。
答案 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;