C# 印刷板(按钮阵列)-未处理nullreferenceexception 我是C的新手,在大学里有C++编程经验。最近我们启动了C,我想做的是一个简单的带有印刷板的游戏,到目前为止,我只使用控制台应用程序。我开始挖掘,我会把链接到下面的主题
我正在使用Visual Studio Ultimate 2013。我想做的板是简单的按钮板,但有额外的属性。因此,我创建了一个从按钮继承的类,并开始添加一些内容,还有更多内容:C# 印刷板(按钮阵列)-未处理nullreferenceexception 我是C的新手,在大学里有C++编程经验。最近我们启动了C,我想做的是一个简单的带有印刷板的游戏,到目前为止,我只使用控制台应用程序。我开始挖掘,我会把链接到下面的主题,c#,button,printing,nullreferenceexception,unhandled,C#,Button,Printing,Nullreferenceexception,Unhandled,我正在使用Visual Studio Ultimate 2013。我想做的板是简单的按钮板,但有额外的属性。因此,我创建了一个从按钮继承的类,并开始添加一些内容,还有更多内容: class Field : Button { private string owner; private string temp_owner; private int level; private int temp_level; public Field() : base()
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);
}
}
我已经检查了一些其他主题,他们说这可能是由于未初始化电路板造成的,但我认为我确实初始化了它。对于如何轻松打印自定义对象数组的任何帮助和其他提示,我将不胜感激
我的研究:
还有许多其他关于印刷的问题
编辑:
Pazi01的答复:
在循环中,需要添加这两行:
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]);
...
}
原因是您没有初始化数组中的数据
for (int i = 0; i < 10; i++)
for (int j = 0; j < 10; j++)
{
this.Board[i, j] = new Field();
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.Controls.Add(this.Board[i, j]);
初始化有助于调试,非常感谢。不幸的是,在第二行中,我得到了带有红色下划线的控件,这表明我缺少引用。我已经检查过了:使用System.Windows.Forms;还检查了引用。编辑:很抱歉控件上缺少s谢谢你,它完成了任务。在我结束话题之前还有最后一个问题。我有没有办法在designer视图Form1.cs[designer]中查看该图板?一旦我启动程序,它就会打印出来,但看不见。提前谢谢。我想如果您更改InitializeComponents方法,但不建议这样做,因为erros可能会破坏designerOK,再次非常感谢。我要结束这个话题了。
this.Board[i, j] = new Field();
this.Controls.Add(this.Board[i, j]);