1

一个应该使用 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:对象引用未设置为对象的实例。在 C:\Users\Алексей\Documents\Visual Studio 2010\Projects\NotepadCSharpSetup\WinFormsAgain\RealTrayForm\Test.cs:line 52 中的 Form1.HotKeyManager_HotKeyPressed(Object sender, HotKeyEventArgs e)

完整代码:

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);

}
4

3 回答 3

1

我不相信new关键字返回Null,除非你没有记忆。打赌是sender不是Form

Form frm = (Form)sender;

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

于 2012-07-09T13:26:30.423 回答
1

这一行:

Form frm = (Form)sender;

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

铸造对象的另一种方法是:

Form frm = sender as Form;

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

我会放置一个断点并检查哪个对象实际上是空的。我的猜测是 sender 从一开始就为空,并且将其转换为 Form 什么都不做。

于 2012-07-09T13:35:17.403 回答
0

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

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

于 2012-07-09T13:19:10.557 回答