Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
VB PictureBox と ShapeContainer について
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=30534#CommentId84159
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 (社会人)
投稿日時
2020/9/7 10:04:18
> PictureBox の Invalidate を呼ぶことだけに特化してみてください。
> そして実際の描画処理は、PictureBox の Paint イベントで行わせるようにします。
Invalidate メソッド + Paint イベントを使ったアナログ時計の
具体的なサンプルがあったので紹介しておきますね。
http://hanatyan.sakura.ne.jp/patio/read.cgi?no=235
このサンプルでは、背景画像を貼ったとしても、ちらつきが気になることはありませんでしたが、
ちらつきを抑えるために DoubleBuffered プロパティを使っている点が大きいです。
(DoubleBuffered を False にするとちらつきます)
ただしこれは PictureBox ではなく Form に直接描画しているためにおこることです。
PictureBox に描画する場合は最初からダブルバッファリングが有効なので、気にしなくて OK。
ダブルバッファリングの恩恵にあずかるためには、
描画処理を Paint イベントに集約する必要があります。
上記サンプルでは、1 秒ごとに秒針がすすむ時計となっていますが、
1 秒未満も連続的に進めるようにしたい場合は、Timer1.Interval を小さくしたうえで、
Timer1 の Tick イベント内の条件判定を捨てて、『Me.Invalidate()』だけにすれば OK。
あとは秒針のための計算処理を
Dim secAng As Double = 2.0 * pai * time.Second / 60.0
から
Dim secAng As Double = 2.0 * pai * (time.Second + time.Millisecond / 1000.0) / 60.0
にすれば、秒針をより細かく動かすことができます。
ついでに、Paint イベントの所で、
Dim g As Graphics = e.Graphics
の下に
g.SmoothingMode = SmoothingMode.HighQuality
を入れておくと、描画結果が綺麗になると思います。