y's note

タイトルの通り備忘録なブログ

VB.NETでちらつきなく描画する方法

VB.NET(ほかの言語でもそうかもしれません)で描画がちらつく事がありますよね。

ダブルバッファが有名ですが、今回は違う方法です。

 

※「タイマーで消す→描画」の繰り返しでちらつくのに効果があります。

  それ以外の時には効果があるかどうかは分かりません。

 

ーーーここからソースコード

 

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load

 'ちらつき防止

 Me.SetStyle(ControlStyles.UserPaint, True)

 Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)

 Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True)

End Sub

 

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

 'Paintイベントを発生させる

 Me.Refresh()

End Sub

 

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint

 Const iti As Integer = 20

 Const Size As Integer = 15

 

 '四角形を描画

 e.Graphics.FillRectangle(Brushes.Red, iti, iti, Size, Size)

End Sub

ーーーソースコード終わり

 

これは、Timer1のTickイベントが発生するたびに

Me.Refresh()でForm1のPaintイベントを発生させる。

というものです。

 

これでちらつきはなくなったと思います。

 

追記:これは

AllPaintingInWmPaint、OptimizedDoubleBuffer、UserPaint

を有効にしないとちらつきます。

なのでソースコードに追加しておきました。