tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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 に差し替える)ことで
実現できるかと思います。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。