teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加

2016/05/26 14:31

投稿

Chironian
Chironian

スコア23274

answer CHANGED
@@ -3,4 +3,35 @@
3
3
  Testクラスの中でForm1()をnewしていますが、Form1_Load()を呼び出していません。
4
4
  従って、Form1_Load()の中で実行しているboard配列への設定処理が呼ばれていませんから、jag()の中の`if (board[x][y] == 0)`にて参照エラーが発生してしまいます。
5
5
 
6
- 通常は、Main()関数の中で[Application.Run(new Form1());](http://www.atmarkit.co.jp/ait/articles/0408/11/news082_5.html)のようにしてForm1のインスタンスを用いてメッセージ・ループを回るようになっています。そのメッセージ・ループの中でForm1_Load()が呼ばれます。
6
+ 通常は、Main()関数の中で[Application.Run(new Form1());](http://www.atmarkit.co.jp/ait/articles/0408/11/news082_5.html)のようにしてForm1のインスタンスを用いてメッセージ・ループを回るようになっています。そのメッセージ・ループの中でForm1_Load()が呼ばれます。
7
+
8
+ ---
9
+ 【追記】
10
+ TestクラスのコンストラクタでForm1への参照をわたせば良いはずです。
11
+
12
+ 下記イメージです。(テストしてないのでビルドエラーがでたら適宜修正下さい。)
13
+ ```C#
14
+ (略)
15
+ private void Form1_Click(object sender, EventArgs e)
16
+ {
17
+ Test sample = new Test(this);
18
+
19
+ sample.test();
20
+ }
21
+ }
22
+
23
+ class Test
24
+ {
25
+ Form1 form;
26
+ Test(Form1 form1)
27
+ {
28
+ form=form1;
29
+ }
30
+
31
+ public void test()
32
+ {
33
+ form.jag(3,2);
34
+ }
35
+ }
36
+ }
37
+ ```