对象引用未设置为对象的实例,通过代码生成 win forms 控件 [duplicate]

Object reference not set to an instance of an object, generating win forms control via code [duplicate]

提问人:Velarux 提问时间:11/10/2018 最后编辑:Velarux 更新时间:11/11/2018 访问量:131

问:

我正在为我的班级制作一个简单的太空入侵者类型的游戏,我试图通过我的代码生成所有内容。我有 3 种方法导致我出现问题

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Space)
        GenerateBullet();
}
private void GenerateBullet()
{
    playerBullet = new PictureBox()
    {
        Parent = backBoard,
        Size = new Size(4, 12),
        Visible = true,
        Enabled = true,
        Image = Properties.Resources.Untitled,
        SizeMode = PictureBoxSizeMode.StretchImage
    };
}
private void BulletMovement(object sender, EventArgs e)
{
   if (playerBullet.Enabled == true)
   {
       playerBullet.Top += 4;
   }
}

检查启用并基于此移动的第三种方法是抛出错误“对象引用未设置为对象的实例”。有没有办法在不通过工具箱/表单设计实际生成图片的情况下解决这个问题。

BulletMovement是由计时器滴答声调用的,对不起,我没有说清楚

C# WinForms NullReferenceException

评论

0赞 dj079 11/10/2018
代码中缺少一些片段。目前尚不清楚何时触发“BulletMovement”方法。请分享相同的内容以及触发所有方法的顺序。

答:

0赞 DRapp 11/10/2018 #1

在执行任何操作之前,您可能应该预先测试 null。

// don't do anything if a null player bullet object
if( playerBullet == null )
   return;

至于使用 sender 和 e 参数,您没有在这些参数上公开足够的代码来显示触发它们的事件处理程序......也许编辑您现有的问题并发布更多详细信息。

评论

0赞 Velarux 11/11/2018
这并不能真正解决任何问题,因为据我所知,创建永远不会生成可调用的对象