PictureBox总是抛出NullReferenceException

时间:2012-07-09 13:14:21

标签: c# winforms picturebox

应该使用PictureBox显示图像的简单代码不起作用(frm是我的表单):

PictureBox pb = new PictureBox();
pb.Image = new Bitmap("1.jpg");
pb.SizeMode = PictureBoxSizeMode.Zoom;
frm.Controls.Add(pb);

当发生此代码的事件时,我有NullReferenceExcpetion

错误发生在frm.Controls.Add(pb)

例外是:

  

System.NullReferenceException:未将对象引用设置为实例   一个对象。在Form1.HotKeyManager_HotKeyPressed(对象发送者,   HotKeyEventArgs e)在C:\ Users \Алексей\ Documents \ Visual Studio中   2010 \项目\ NotepadCSharpSetup \ WinFormsAgain \ RealTrayForm \ test.cs中:行   52

完整代码:

static void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e)
{
    Size ScreenSize = Screen.PrimaryScreen.Bounds.Size;

    Bitmap image = new Bitmap(ScreenSize.Width, ScreenSize.Height);
    using (Graphics g = Graphics.FromImage(image))
    {
        g.CopyFromScreen(Point.Empty, Point.Empty, ScreenSize);
    }
    Bitmap preview = new Bitmap(image.Width / 10, image.Height / 10);
    using (Graphics gr = Graphics.FromImage(preview))
    {
        gr.SmoothingMode = SmoothingMode.AntiAlias;
        gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
        gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
        gr.DrawImage(image, new Rectangle(0, 0, image.Width / 10, image.Height / 10));
    }
    preview.Save("1.jpg");

    Form frm = (Form)sender;
    PictureBox pb = new PictureBox();
    pb.Image = new Bitmap("1.jpg");
    pb.SizeMode = PictureBoxSizeMode.Zoom;
    frm.Controls.Add(pb);

}

3 个答案:

答案 0 :(得分:1)

我不相信new关键字会返回Null,除非您没有内存。赌注是sender不是Form

Form frm = (Form)sender;

我认为这一行为空,这就是frm.Controls.Add(pb)失败的原因。

答案 1 :(得分:1)

这一行:

Form frm = (Form)sender;

如果发件人不是Type Form,实际上会导致InvalidCastException(或类似的东西)。

投射物体的另一种方式是:

Form frm = sender as Form;

如果sender不是Form类型(而不是抛出异常),这实际上会将frm设置为null。

我会设置一个断点并检查哪个对象实际为空。我的猜测是发件人从一开始就是空的,并将其转换为Form不会做任何事情。

答案 2 :(得分:0)

最可能的原因是因为位图在当前正在查找的位置不存在。

确保您有正确尝试在图片框中显示的图像的路径。