努力将对象插入另一个类列表

时间:2018-04-01 12:48:08

标签: c# .net nullreferenceexception

我正在使用C#为Computer Graphics类做一个项目,但是我遇到了OOP问题。

我需要将点数从世界坐标转换为视口坐标,反之亦然。

为此,我有3个班级:PointWindowPolygonmainForm。 我从鼠标坐标事件中获取视口坐标。

Window中我只有xmin / max和ymin / max的属性(用于确定mainform中的窗口/视口)。

Polygon中,我有list<Point> points;

mainForm上,将视口转换为世界坐标的方法,以及插入点的MouseDown事件。

问题:

如何在列表中插入一个点?来自mainForm;

错误:

  

System.NullReferenceException:'对象引用未设置为对象的实例。' pol.points为空。

代码摘录:

Window World = new Window(-250, -250, 250, 250);
Window vp = new Window(0, 0, 500, 500);
Point pto = new Point();
Polygon pol = new Polygon();
public double x, y;

public double Yvp2W(int y, Window m, Window v)
{
    return ((1 - (y - v.ymin) / (v.ymax - v.ymin)) * ((m.ymax - m.ymin) + m.ymin));
}

public double Xvp2W(int x, Window m, Window v)
{
    return ((x - v.xmin) / (v.xmax - v.xmin)) * ((m.xmax - m.xmin) + m.xmin);

}

public void Axis(){
    pto.x = Xvp2W(250, world, vp); //returns 125
    pto.y = Yvp2W(0, world, vp);   //returns 250
    pol.points.Add(pto);           //pol.pontos returns null <- THE ERROR
}

我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果points在使用之前为null,则需要创建PointsCollection

public void Axis(){
        pto.x = Xvp2W(250, world, vp); //return 125
        pto.y = Yvp2W(0, world, vp); //return 250
        if(pol.points == null) 
        {
              pol.points=new PointsCollection();
        }
        pol.points.Add(pto); //pol.pontos return null <- THE ERROR
}