我无法更改按钮

时间:2017-01-03 23:04:10

标签: c# winforms

我无法更改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”类型异常 附加信息:对象引用未设置为对象的实例。

我的所有按钮都为空,我找不到改变它们的方法 (如果我没有提供足够的信息,我也提前抱歉,我对此有点新鲜感。)

2 个答案:

答案 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