C# 在Windows Forms.NET应用程序中调用g.DrawString()时System.ArgumentException
我有点纠结于一个我似乎无法理解的问题 我有一个简单的Windows窗体应用程序,其中显示了太阳系中的行星和一些有关它们的信息 然而,当我尝试绘制行星细节时,我得到以下例外:C# 在Windows Forms.NET应用程序中调用g.DrawString()时System.ArgumentException,c#,.net,winforms,C#,.net,Winforms,我有点纠结于一个我似乎无法理解的问题 我有一个简单的Windows窗体应用程序,其中显示了太阳系中的行星和一些有关它们的信息 然而,当我尝试绘制行星细节时,我得到以下例外: A first chance exception of type 'System.ArgumentException' occurred in System.Drawing.dll An unhandled exception of type 'System.ArgumentException' occurred in Sy
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.
这就是我尝试绘制的方法:(在主窗体类中)
下面是全班同学:
行星等级:
知道应用程序失败的原因吗?错误消息的信息量不大
编辑:结果表明错误的发生与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");
}
}
如果行星名称为空,则可能发生这种情况。如果列表中有一些值行星为空,uou可以测试此方法
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);
}
我终于让它工作了。显然,将Graphics对象作为成员变量并从我的方法中调用它存在问题。相反,我最终做了:
var g = CreateGraphics();
g.drawString(...);
谢谢你的帮助 我现在检查了行星名称,结果发现即使我不使用drawString方法,也不会出现错误。我已经更新了问题。如果行星名称从不为空,那么问题可能发生在行星上。Draw方法。你也可以粘贴行星类的代码吗?谢谢回复。我再次更新了我的问题,它似乎与行星类没有任何关系。当我点击一个对行星没有任何作用的按钮时,它也会以同样的错误崩溃。是的,但这里的东西可能会误导。当您在单击时发生崩溃,因此认为问题可能存在于单击处理程序上,但是OnPaint()方法可能会被调用并在那里崩溃。哦,这确实是可能的。我没想到。这是planet类:我真的怀疑
btnToggleInfo\u Click
处理程序是否会因该错误而失败。我很确定您提供的btnToggleInfo\u Click
的最新版本中不会出现ArgumentNullException
(编辑2)
var g = CreateGraphics();
g.drawString(...);