2011-01-04 18 views
2

私は私が持っているのPictureBoxでグラフィックファイルを表示したい:コントロールを描画する方法描画が消えることはありませんか?

private void btnLoad_Click(object sender, EventArgs e) 
{ 
    if (dgOpenFile.ShowDialog() == DialogResult.OK) 
    { 
     Bitmap img = new Bitmap(dgOpenFile.FileName); 
     picture.Width = img.Height; 
     picture.Height = img.Height; 
     g.DrawImage(img, 0f, 0f); 
    } 
} 

g

private void Form1_Load(object sender, EventArgs e) 
{ 
    g = picture.CreateGraphics(); 
} 

だが、私は私の絵が消えた窓の外に私のフォームを移動したとき。どうすればそれを防ぐことができますか?

+1

ピクチャをピクチャボックス( 'Image'-Property)に割り当てるのはなぜですか? – Bobby

+3

「g」はどこから来たのですか?それは非常に間違っています。 – leppie

+1

'g'はあなたの問題です。代わりに 'OnPaint'メソッドからインスタンスを取得してください。 – leppie

答えて

3

コントロールの永続化するために、コントロールのOnPaintイベントで任意のカスタム図面を行う必要があります。これにより、コントロールが描画されるたびに描画が再描画されます。

ただし、この場合には、それが設計されたとして、ピクチャボックスを使用して容易になるだろう:

picture.Image = img; 
2

Windowsは、ペイント・オン・リクエスト原理を使用しています。

したがって、コントロールにWM_PAINTメッセージを送信すると、OnPaint()が呼び出されます。オーバーライドされたOnPaint()またはPaintイベントハンドラに画像を(再び)描画する準備ができているはずです。

しかし、Pictureboxはこれをすべて行います。

+1

WM_PAINをWM_PAINTに変更しました。 –

関連する問題