Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
C# フォームのOnPaintイベントについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=9729#CommentId15419
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2010/8/6 13:05:38
> C# フォームのOnPaintイベントについて
OnPaint はイベントでは無く、メソッドですね。
(Paint イベントと混同されていませんか?)
> //base.OnPaint(e);
base.OnPaint の呼び出しを省略すると、Paint イベントが発生しなくなりますのでご注意を。
> g.Dispose();
外部から引数で渡されるオブジェクトを、勝手に Dispose しては駄目ですよ。
(今回の場合は Dispose しても問題は出ないとは思いますが…)
本来、自らが Dispose しなければいけないのは、その Graphics が
自分で作成した物(Graphics.FromImage や CreateGraphics などで)の場合です。
> その際、フォームがアクティブ?になる度にOnPaintイベントが発生します
OS 側で再描画が必要と判断された場合には、OnPaint/Paint が呼び出されますので、
結果的にそう見える事もあるかも知れません。ただし、常に発生するわけではありません。
確認のために、描画処理の先頭に
Trace.WriteLine(DateTime.Now.ToString("HH:mm:ss.ffff"));
などと書いておき、フォームを切り替えるテストを行ってみてください。OS にもよりますが、
切り替えるタイミングで、呼ばれる場合と呼ばれない場合があるかと思います。
> コスパ的に気になってきました。
ごめんなさい、それはどういう意味でしょうか?
> 実際、このOnPaintイベントの発生を1回目以降イベントを起こさないようにしてしまった場合
ここでいう「イベントを起こさない」というのは、どのような処理の事を指しておられますか?
イベントという物は、通常、自動的に呼びだされるものを利用するだけであって、
自分で発生させる類の物では無いと思います。
(コントロールやコンポーネントを開発する場合は、自分で発生させることもありますが)
> 何らかの不具合がでますでしょうか?
イベントを起こさない、という言葉の意味が分からないので回答に迷いますが、
「再描画が不要な状態にする」という意味であれば、問題無いと思います。
どのようにしてそれを実現するのか、という点が不明瞭なので確約はできませんが。
「base.OnPaint を呼びだすかどうかを変更する」という意味だとすれば、
OnPaint を呼ばない場合は自己描画、OnPaint を呼ぶ場合は標準描画となるでしょう。
「再描画要求時に何も行わないようにする(base.OnPaint すら呼ばない)」という意味なら、
恐らくは画面が更新されないという不具合になるかと思います。