我正在努力解决一个我似乎无法弄清楚的问题。
我有一个简单的Windows窗体应用程序,我在太阳系中显示行星及其中的一些信息。
但是,当我尝试绘制行星细节时,我得到以下异常:
A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll
An unhandled exception of type 'System.ArgumentException' occurred in System.Drawing.dll
Additional information: Parameter is not valid.
这是我尝试绘图的方法:(在主窗体类中)
private void btnToggleInfo_Click(object sender, EventArgs e)
{
showPlanetDetails = !showPlanetDetails;
if (showPlanetDetails)
{
foreach (var planet in planets)
{
var font = new Font("Times New Roman", 12);
var brush = new SolidBrush(Color.Black);
g.DrawString(planet.ToString(), font, brush, planet.GetOccupiedScreenArea().Left, planet.GetOccupiedScreenArea().Bottom + 20);
}
}
}
以下是全班:http://pastebin.com/55XtaRgT 行星类:http://pastebin.com/iC7fgzqx
为什么应用程序失败的任何想法?错误消息的信息量不大。
编辑:结果发生错误,与drawString方法无关。我试着评论所有绘图,同样的事情发生了。
private void btnToggleInfo_Click(object sender, EventArgs e)
{
showPlanetDetails = !showPlanetDetails;
if (showPlanetDetails)
{
foreach (var planet in planets)
{
Console.WriteLine("Hello from planet");
//var font = new Font("Times New Roman", 12);
//var brush = new SolidBrush(Color.Black);
// g.DrawString(planet.Name, font, brush, planet.GetOccupiedScreenArea().Left,
// planet.GetOccupiedScreenArea().Bottom + 20);
}
}
}
编辑2:当我点击“显示行星细节”按钮时,它也会因同样的错误崩溃: 这是唯一的代码:
private void btnToggleInfo_Click(object sender, EventArgs e)
{
showPlanetDetails = !showPlanetDetails;
if (showPlanetDetails)
{
Console.WriteLine("Button clicked");
}
}
答案 0 :(得分:0)
如果行星名称为空,则可能发生。
答案 1 :(得分:0)
然后你的列表行星中有一些值是全部,你可以测试这个方法
foreach (var planet in planets.Where(planet => planet != null))
{
Console.WriteLine("Hello from planet");
//var font = new Font("Times New Roman", 12);
//var brush = new SolidBrush(Color.Black);
// g.DrawString(planet.Name, font, brush, planet.GetOccupiedScreenArea().Left,
// planet.GetOccupiedScreenArea().Bottom + 20);
}
答案 2 :(得分:0)
我终于开始工作了。将Graphics对象作为成员变量显然存在问题,并从我的方法中调用它。我反而最终做了:
var g = CreateGraphics();
g.drawString(...);
感谢您的帮助!