2017-01-03 13 views
-1

私の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 
     } 
    } 

私は 追加情報

「System.NullReferenceException」種類の未処理の例外がスーパーTTT.exeで発生したこのエラーを取得ボタンをクリックしてみてくださいたび:オブジェクト参照がインスタンスに設定されていませんオブジェクト。

私のすべてのボタンがnullで、私はそれらを変更する方法が見つかりません (私は十分な情報を提供していない場合は、事前に申し訳ありません、私はちょっとこれに新しいです)。

+2

"new Button [9,9];"で配列を作成しました。各インデックスにアイテムを実際に作成したことはありません。すべての[#、#]にアクセスすると、ボタンではなくヌル値が引き出されます。 – bgura

+0

私は不思議です、なぜ配列の各要素を別々のフィールドに読み込むのですか?ポイントは何ですか? – Amy

答えて

1

Button [,] all = new Button[9,9]; 

は...あなたが行っているすべての配列を初期化ですButton。配列の各要素はnullです。

StartingForm_Load(...)メソッドでデバッグする場合、各割り当て(例:a00 = all[0, 0])がnullの値になることがわかります。私はあなたがリサイズを使用していることを想定しています

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(); 
    } 
} 

StartingFormコンストラクタに要素の初期化を追加します。現在の実装を継続したい場合は、TableLayoutPanelを使用することをお勧めします。

+0

そのコードは正しく表示されません。それを試しましたか? – LarsTech

+0

あなたはそうです。多次元配列を反復処理できません。ありがとう、修正されます。 – IAbstract

+0

また、 'foreach反復変数'のため 'b'に代入できません。 – LarsTech

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(); 

さて、一つの問題は解決しますが、あなたの現在の実装で多くの人があるでしょう...ここで

関連する問題