C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: pictureBoxのスクロール


(過去ログ 40 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■20804 / inTopicNo.1)  pictureBoxのスクロール
  
□投稿者/ morimo (1回)-(2008/06/16(Mon) 22:49:09)

分類:[C#] 

morimoと申します。

WinXP環境でVisual Studio 2008のC#環境でWindowsアプリケーションを作っています。

FormにPanelを配置し、Panelの中にPictureBoxを配置しております。
PictureBox内にグラフ表の線を表記したのですが、CPU負荷が100%になり、他の処理が
遅くなり過ぎて困っています。
何が原因で、解決はどうすればよいのでしょうか?原因となっている記述箇所は
わかったのですが。{}内の最初の2行が原因みたいなのです。
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);
Graphics grph = Graphics.FromImage(pictureBox1.Image);

Rectangle rect = new Rectangle(1, 20, 1500, 300);
Pen pen1 = new Pen(Color.Black, 1);
Pen pen2 = new Pen(Color.Black, 2);
grph.FillRectangle(Brushes.White, rect);
grph.DrawRectangle(pen2, rect);
int ix = 0, iy = 0;
for (ix = 1; ix < (1200 / 30); ix++)
{
grph.DrawLine(pen1, (0 + ix * 30), 20, (0 + ix * 30), 320);
}
for (iy = 1; iy < (300 / 30); iy++)
{
grph.DrawLine(pen1, 0, (20 + iy * 30), 720, (20 + iy * 30));
}
grph.Dispose();
}

引用返信 編集キー/
■20806 / inTopicNo.2)  Re[1]: pictureBoxのスクロール
□投稿者/ Azulean (146回)-(2008/06/16(Mon) 23:20:46)
> private void pictureBox1_Paint(object sender, PaintEventArgs e)
> {
> pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height);

ImageプロパティにBitmapを代入した時点で、再描画が要求されます。
再描画はPaintイベントが呼び出されることで行われるため、再度Imageプロパティに画像が代入されます。
それを永遠と繰り返しているのでCPU使用率が100%になるわけです。

Bitmapに描いて、Imageプロパティに設定するのであれば、Paintイベントにこれらのコードを書かないで下さい。
Paintイベントで描くのであれば、e.Graphicsに描きこみ、Imageプロパティを使わないで下さい。
引用返信 編集キー/
■20810 / inTopicNo.3)  Re[2]: pictureBoxのスクロール
□投稿者/ morimo (2回)-(2008/06/17(Tue) 09:02:26)
回答ありがとうございました。e.Graphicsを使ってうまくいきました。
かじりたてなもんでWebで見つけた記述をそのまま使っていました。

> Bitmapに描いて、Imageプロパティに設定するのであれば、Paintイベントにこれらのコードを書かないで下さい。
> Paintイベントで描くのであれば、e.Graphicsに描きこみ、Imageプロパティを使わないで下さい。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -