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 (オブジェクト送信者、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;

この行は null だと思うので、frm.Controls.Add(pb)失敗します。

于 2012-07-09T13:26:30.423 に答える
1

この行:

Form frm = (Form)sender;

送信者が Type Form でない場合、実際には InvalidCastException (または同様のもの) が発生します。

オブジェクトをキャストする別の方法は次のとおりです。

Form frm = sender as Form;

これは、送信者が Form 型でない場合 (例外をスローする代わりに)、実際には frm を null に設定します。

ブレーク ポイントを配置して、どのオブジェクトが実際に null であるかを確認します。私の推測では、sender は最初から null であり、それを Form にキャストしても何も起こらないと思います。

于 2012-07-09T13:35:17.403 に答える
0

これの最も可能性の高い原因は、ビットマップが現在見ている場所に存在しないためです。

画像ボックスに表示しようとしている画像へのパスが正しいことを確認してください。

于 2012-07-09T13:19:10.557 に答える