C# 在Windows Forms.NET应用程序中调用g.DrawString()时System.ArgumentException

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

我有点纠结于一个我似乎无法理解的问题

我有一个简单的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.
这就是我尝试绘制的方法:(在主窗体类中)

下面是全班同学: 行星等级:

知道应用程序失败的原因吗?错误消息的信息量不大

编辑:结果表明错误的发生与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(...);