タイトル : Re: プログラムの制御について 投稿日 : 2015/06/14(Sun) 14:41 投稿者 : 魔界の仮面弁士
最大の問題点は、「CreateGraphics メソッド」を使っているということですね。 CreateGrapchis での描画は一時的なものなので、外部要因によって容易く消えてしまうものです。 (消えてしまうことを防ぐという方向で考えない方が良いでしょう) 消えても構わないほど連続描画を繰り返すアニメーション処理などで使われることはありますが、 普通のアプリケーションでは、あまり使うことの無いメソッドです。 この手の描画処理では、 (A案) Paint イベントによる e.Graphics への描画(OnPaint メソッドのオーバーロードでも可) (B案) Bitmap オブジェクトに Graphis.FromImage し、その画像を BackgroundImage プロパティに割り当てる(PictureBox.Image でも可) というのが基本方針となります。 B 案は、描画頻度が少ない場合や、描画フォームサイズが変化しないケースで有効です。 コードとしても、描画処理が一度しか行われないので扱いやすいでしょう。 A 案は、頻繁に描きかえるようなもの(時計など)に有効です。Windows の本質的にはこちら。 描画タイミングが不定期なので、「描画データを更新する処理」と「描画処理本体」を分けて 考える必要があるため、描画処理を誘発させるための Invalidate メソッドと併用することも多いです。 今回はどちらでも構わないと思いますが、B 案が良いのでは無いでしょうか。 bmp = New Bitmap(幅, 高さ) で用意したビットマップに対して、 g = Graphicis.FromImage(bmp) で生成した Graphics に描画します。 描いた bmp は、Form.BackgroundImage ないしは PictureBox.Image に割り当てれば OK 。 キー入力 3 秒ルールについては、この bmp の内容を描きかえる(または別の bmp に差し替える)ことで 実現できるかと思います。 |