C#中的System.NullReferenceException错误

时间:2014-11-03 08:19:40

标签: c# oop

对于学校我们试图在Windows窗体应用程序中绘制一辆汽车,它需要是OOP。我们在表单中有4个按钮,一个用于绘制圆形,一个用于绘制正方形,一个用于绘制整车,另一个用于乘坐汽车。我们制作了一个Car类,它制作了两个圆形和一个应该形成汽车形状的正方形。当我们在car类中实例化一个新的圆时,我们得到一个System.NullReferenceException错误。我们如何解决这个问题?按钮3是创建汽车类。这是我们的代码:

这是我们的表格:

namespace Maissan_Autootje_V1
{
    public partial class Form1 : Form
    {
        Graphics g;
        public Form1()
        {
            InitializeComponent();
            g = this.CreateGraphics();
        }


        private void button1_Click(object sender, EventArgs e)
        {
            Refresh();
            Square square = new Square(150, 200, 150, 100);
            square.Draw(g);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Refresh();
            Circle circle = new Circle(100, 250, 100, 100);
            Circle circle2 = new Circle(280, 250, 100, 100);
            circle.Draw(g);
            circle2.Draw(g);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            Auto auto = new Auto();
        }

        private void button4_Click(object sender, EventArgs e)
        {

        }

    }
}

这是我们的圈子(广场与圈子类几乎相同):

namespace Maissan_Autootje_V1
{
    public class Circle
    {
        public Pen myPen = new Pen(Color.Blue, 5);

        int x;
        int y;
        int width;
        int height;

        public Circle(int x, int y, int width, int height)
        {
            this.x = x;
            this.y = y;
            this.width = width;
            this.height = height;
        }

        public void Draw(Graphics g)
        {                      
                g.DrawEllipse(myPen, x, y, width, height);            
        }
    }
}

这应该是吸引汽车的班级:

namespace Maissan_Autootje_V1
{
    class Auto : Form1
    {
        Graphics g;

        public Auto()
        {


            Circle circle = new Circle(100, 250, 100, 100);
            Circle circle2 = new Circle(280, 250, 100, 100);
            Square square = new Square(150, 200, 150, 100);
            circle.Draw(g);
            circle2.Draw(g);
            square.Draw(g);
        }
    }
}

提前致谢!

1 个答案:

答案 0 :(得分:1)

您需要为Auto提供Graphics对象的实例。

Graphics g == null

所以..例如:

class Auto
{
    public Auto(Graphics g)
    {
        Circle circle = new Circle(100, 250, 100, 100);
        Circle circle2 = new Circle(280, 250, 100, 100);
        Square square = new Square(150, 200, 150, 100);
        circle.Draw(g);
        circle2.Draw(g);
        square.Draw(g);
    }
}