0

我目前正在开发一个基本的绘图程序。要求之一是能够保存绘制的对象列表并将其重新加载。到目前为止,我已经编写了一个保存函数,可以将列表中的所有项目导出为 XML 格式,我目前正在研究装载部分。

每当程序遇到“< RechthoekTool >”(荷兰语为 RectangleTool)时,它就会执行以下代码:

//Create new tool.
RechthoekTool tool = new RechthoekTool();

//Turn <Startpoint> and <Endpoint> into actual points
var sp = Regex.Replace(xn["Startpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.startpunt = new Point(int.Parse(sp[0]), int.Parse(sp[1]));
var ep = Regex.Replace(xn["Eindpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.eindpunt = new Point(int.Parse(ep[0]), int.Parse(ep[1]));

//Set colour and width of brush
string kleur = xn["Dikte"].InnerText;
kleur.Replace(@"Color [", "");
kleur.Replace(@"]", "");
Color c = Color.FromName(kleur);
tool.kwastkleur = c;
tool.kwast = new SolidBrush(c);
tool.dikte = int.Parse(xn["Dikte"].InnerText);

//Add to list
s.listItems.Add(tool);

每当我运行程序时,我都会在

s.listItems.Add(工具);

但是,我确实在一开始就实例化该工具,不是吗?什么可能导致此错误?一些谷歌搜索告诉我这可能是因为我忘记分配一个属性,但据我所知,我已经把它们都覆盖了......

帮助将不胜感激。

4

3 回答 3

9

该错误是由于实例化s或未s.listItems实例化造成的。

在没有看到更多代码的情况下,很难知道哪个为空,但猜测您正在为 创建一个新对象s,其中包含一个属性/字段listItems,但您没有将列表分配给listItems.

于 2013-11-04T20:48:24.460 回答
2

问题是您没有实例化listItemss. 没有提供足够的信息来告诉您如何实例化s,但您可以这样做:

s.listItems = new List<RechthoekTool>();
于 2013-11-04T20:49:00.030 回答
1

如果您不使用new关键字实例化某些东西;它根本行不通。

使用您的代码,试试这个:

//Create new tool.
RechthoekTool tool = new RechthoekTool();

//Turn <Startpoint> and <Endpoint> into actual points
var sp = Regex.Replace(xn["Startpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.startpunt = new Point(int.Parse(sp[0]), int.Parse(sp[1]));
var ep = Regex.Replace(xn["Eindpunt"].InnerText, @"[\{\}a-zA-Z=]", "").Split(',');
tool.eindpunt = new Point(int.Parse(ep[0]), int.Parse(ep[1]));

//Set colour and width of brush
string kleur = xn["Dikte"].InnerText;
kleur.Replace(@"Color [", "");
kleur.Replace(@"]", "");
Color c = Color.FromName(kleur);
tool.kwastkleur = c;
tool.kwast = new SolidBrush(c);
tool.dikte = int.Parse(xn["Dikte"].InnerText);

List<RechthoekTool> s = new List<RechthoekTool>();  // You can now use your list.
//Add to list
s.listItems.Add(tool);
于 2013-11-04T21:00:26.557 回答