Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 印刷板(按钮阵列)-未处理nullreferenceexception 我是C的新手,在大学里有C++编程经验。最近我们启动了C,我想做的是一个简单的带有印刷板的游戏,到目前为止,我只使用控制台应用程序。我开始挖掘,我会把链接到下面的主题_C#_Button_Printing_Nullreferenceexception_Unhandled - Fatal编程技术网

C# 印刷板(按钮阵列)-未处理nullreferenceexception 我是C的新手,在大学里有C++编程经验。最近我们启动了C,我想做的是一个简单的带有印刷板的游戏,到目前为止,我只使用控制台应用程序。我开始挖掘,我会把链接到下面的主题

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

我正在使用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);
    }
}
我已经检查了一些其他主题,他们说这可能是由于未初始化电路板造成的,但我认为我确实初始化了它。对于如何轻松打印自定义对象数组的任何帮助和其他提示,我将不胜感激

我的研究:

还有许多其他关于印刷的问题

编辑:

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