DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Graphicsによる描画のタイミング

環境/言語:[XP,C#,.NET Framework2.0]
分類:[.NET]

こんばんは。現在C#にてフォームプログラミングを行っているのですが
問題が発生し解決できないので書き込みすることにしました。

ShowImage というフォームに
ShowImage(string texAddress)
{
//Image img; Graphics g; は宣言済み
InitializeComponent();
img = Image.FromFile(texAddress);
g = pictureBox.CreateGraphics();
g.DrawImage(img,0,0);
}
というコンストラクタを生成しました。
そして親クラスにてインスタンス化を行い表示させたところ、一瞬だけ画像が表示されすぐに消えてしまいました。
ためしに pictureBox_Clickイベントに g.DrawImage(img,0,0); と記述したところ、imgは描画されました。このフォームでの画像は一度表示したまま変更させるつもりは無かったのでコンストラクタで表示を一回だけ行うつもりだったのですが、コンストラクタでの表示は出来ないのでしょうか。
よろしくお願いします。
CreateGraphics は限定された場面をのぞき使用しません。
通常、Paint イベントで、イベント引数 PaintEventArgs の Graphics プロパティを使って描画を行います。
描画に使用する Image オブジェクト自体は Form のコンストラクタなりで生成してフィールドに持っておくといいでしょう。

> ためしに pictureBox_Clickイベントに g.DrawImage(img,0,0); と記述したところ、imgは描画されました。
再描画できないので、ほかのウィンドウが重なるとその部分だけ欠けますよ。
2009/03/13(Fri) 23:56:44 編集(投稿者)

> CreateGraphics は限定された場面をのぞき使用しません。
> 通常、Paint イベントで、イベント引数 PaintEventArgs の Graphics プロパティを使って描画を行います。

知りませんでした。早速コードを書き直します。
Paintイベントに変更したあとで成果報告をさせていただきます。
迅速かつ非常にわかりやすい説明をしていただき、ありがとうございました。
解決済み!
2009/03/14(Sat) 00:09:43 編集(投稿者)

無事描画することが出来ました。
イベントハンドラとイベントについても少し理解が深まったような気がします。
本当にありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板