私はC#を初めて使用し、C ++で同じ経験を積んだ後です(大学での1年間のプログラミング)。最近、私たちは C# を始めました。私がやりたかったことは、プリント基板を使った単純なゲームです (これまでのところ、私はコンソール アプリケーションだけで作業しています)。私は掘り始めました(主題へのリンクを以下に配置します)。
私は Visual Studio Ultimate 2013 を使用しています。作成したいボードは、ボタンのシンプルなボードです (ただし、追加のプロパティがあります)。だから私はボタンから継承するクラスを作成し、いくつかのものを追加し始めました(もっとあるでしょう):
class Field : Button
{
private string owner;
private string temp_owner;
private int level;
private int temp_level;
public Field() : base()
{
owner = "brak";
temp_owner = owner;
level = 0;
temp_level = level;
}
}
次に、(Form1.Designer.cs で) ボタンが通常どのように初期化されるかを調べましたが、Visual Studio ではそこに何も記述できないため、メソッド build_board を作成して Form1.cs に配置しました。
public partial class main_form : Form
{
public main_form()
{
InitializeComponent();
build_board();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private System.Windows.Forms.Button [,] Board;
private void build_board()
{
this.Board = new Field[10, 10];
this.SuspendLayout();
//
// Board
//
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
{
this.Board[i, j].BackColor = System.Drawing.SystemColors.Control;
this.Board[i, j].Location = new System.Drawing.Point(10 + i * 10, 10 + j * 10);
this.Board[i, j].Name = "Field [ " + i + " , " + j + " ]";
this.Board[i, j].Size = new System.Drawing.Size(50, 50);
this.Board[i, j].TabIndex = 100 * i + j;
this.Board[i, j].Text = "";
this.Board[i, j].UseVisualStyleBackColor = false;
}
this.ResumeLayout(false);
}
}
問題は、デバッガーが次の行で「NullReferenceException was unhandled」について叫んでいることです。
this.Board[i, j].BackColor = System.Drawing.SystemColors.Control;
他のトピックを確認したところ、ボードが初期化されていないことが原因である可能性があるとのことですが、初期化したと思います。カスタムオブジェクトの配列を簡単に印刷する方法についての助けと、おそらく他のヒントをいただければ幸いです。
私の研究:
C# NullReferenceException が処理されませんでした - オブジェクト参照がオブジェクトのインスタンスに設定されていません
NullReferenceException は処理されませんでした C#
(他にも印刷に関するもの多数)
編集:
Pazi01 による回答: ループでは、次の 2 行を追加する必要があります。
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
{
this.Board[i, j] = new Field();
this.Controls.Add(this.Board[i, j]);
...
}