我无法更改c#表单中任何按钮内的文本,我正在为一个课程项目制作一个大型的tic tac toe游戏,似乎无法找出我的问题所在。
Button [,] all = new Button[9,9];
int turn = 1;
public StartingForm()
{
InitializeComponent();
}
private void StartingForm_Load(object sender, EventArgs e)
{
a00 = all[0, 0];
a01 = all[0, 1];
a02 = all[0, 2];
a03 = all[0, 3];
a04 = all[0, 4];
a05 = all[0, 5];
a06 = all[0, 6];
a07 = all[0, 7];
a08 = all[0, 8];
a10 = all[1, 0];
a11 = all[1, 1];
a12 = all[1, 2];
a13 = all[1, 3];
a14 = all[1, 4];
a15 = all[1, 5];
a16 = all[1, 6];
a17 = all[1, 7];
a18 = all[1, 8];
a20 = all[2, 0];
a21 = all[2, 1];
a22 = all[2, 2];
a23 = all[2, 3];
a24 = all[2, 4];
a25 = all[2, 5];
a26 = all[2, 6];
a27 = all[2, 7];
a28 = all[2, 8];
a30 = all[3, 0];
a31 = all[3, 1];
a32 = all[3, 2];
a33 = all[3, 3];
a34 = all[3, 4];
a35 = all[3, 5];
a36 = all[3, 6];
a37 = all[3, 7];
a38 = all[3, 8];
a40 = all[4, 0];
a41 = all[4, 1];
a42 = all[4, 2];
a43 = all[4, 3];
a44 = all[4, 4];
a45 = all[4, 5];
a46 = all[4, 6];
a47 = all[4, 7];
a48 = all[4, 8];
a50 = all[5, 0];
a51 = all[5, 1];
a52 = all[5, 2];
a53 = all[5, 3];
a54 = all[5, 4];
a55 = all[5, 5];
a56 = all[5, 6];
a57 = all[5, 7];
a58 = all[5, 8];
a60 = all[6, 0];
a61 = all[6, 1];
a62 = all[6, 2];
a63 = all[6, 3];
a64 = all[6, 4];
a65 = all[6, 5];
a66 = all[6, 6];
a67 = all[6, 7];
a68 = all[6, 8];
a70 = all[7, 0];
a71 = all[7, 1];
a72 = all[7, 2];
a73 = all[7, 3];
a74 = all[7, 4];
a75 = all[7, 5];
a76 = all[7, 6];
a77 = all[7, 7];
a78 = all[7, 8];
a80 = all[8, 0];
a81 = all[8, 1];
a82 = all[8, 2];
a83 = all[8, 3];
a84 = all[8, 4];
a85 = all[8, 5];
a86 = all[8, 6];
a87 = all[8, 7];
a88 = all[8, 8];
}
private void a00_Click(object sender, EventArgs e)
{
if (turn == 1)
{
all[0, 0].Text = "X";
turn = 2;
}
else
{
all[0, 0].Text = "O";
turn = 1; //this makes it X's turn
}
}
每当我尝试点击按钮时,我都会收到此错误
Super TTT.exe中出现未处理的“System.NullReferenceException”类型异常 附加信息:对象引用未设置为对象的实例。
我的所有按钮都为空,我找不到改变它们的方法 (如果我没有提供足够的信息,我也提前抱歉,我对此有点新鲜感。)
答案 0 :(得分:1)
Button [,] all = new Button[9,9];
代码中的这一行只创建元素数组,而不是按钮本身。你必须迭代它并为每个按钮调用构造函数。
for(int i = 0; i < 9; i++)
for(int j = 0; j < 9; j++) all[i,j] = new Button();
好的,有一个问题已经解决,但目前的实施还会有很多其他问题......
答案 1 :(得分:1)
下面:
Button [,] all = new Button[9,9];
...你所做的就是初始化一个Button
的数组。数组的每个元素都是null
。
如果您通过StartingForm_Load(...)
方法进行调试,则应该能够看到每个作业(例如:a00 = all[0, 0]
)的结果为null
。
向StartingForm
构造函数添加元素初始化:
public StartingForm() {
InitializeComponent();
for(int x = 0; x < 9; x++)
for(int y = 0; y < 9; y++) {
// note: after initialization, you will need to assign position values
all[x, y] = new Button();
}
}
我假设您使用的是WinForms。如果您想继续使用当前的实现,那么我建议使用TableLayoutPanel。