Plutonix'in açıkladığı gibi, bir yenileme işlemi Invalidate
yöntemini çağırarak işlenir.
Hatırlamak zorunda olmanız gereken şey, bir yüzeye boyanmış olmanın kalıcı olmamasıdır, bu nedenle her seferinde tüm ekranı yeniden çizmeniz gerekir. Elbette, bu işlemin performans açısından optimize edilebileceği pek çok yol vardır; çünkü bu işlem son derece yoğun CPU yoğun olabilir; Özellikle, GDI + donanımı hızlandırılmadığından.
Peki, ne yapmak gerekir ise:
Tutanak her tıklama (x, y konum) ve her çemberin yarıçapı rasgele olduğundan, o
depolamak zaman yarıçapı belirlemek kullanıcı formu tıkladığında, o zaman, x, bir tıklama sonra
y konumu ile birlikte saklayın sahip Paint
olay yeniden çizmek (kendi yarıçapı olan) tıklama saklanan her dizi ve her bir daire yeniden çizmek tekrar ve tekrar .
İşte hile yapacak bir uygulama. Sadece denemeniz için herhangi form'ın sınıf içinde bu kodu yapıştırın:
Private Class Circle
Public ReadOnly Property Center As Point
Public ReadOnly Property Radius As Integer
Public Sub New(center As Point, radius As Integer)
Me.Center = center
Me.Radius = radius
End Sub
End Class
Private circles As New List(Of Circle)
Private radiusRandomizer As New Random()
Private Sub FormLoad(sender As Object, e As EventArgs) Handles MyBase.Load
Me.SetStyle(ControlStyles.AllPaintingInWmPaint, True) ' Not really necessary in this app...
Me.SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.UserPaint, True)
End Sub
Private Sub FormMouseClick(sender As Object, e As MouseEventArgs) Handles Me.MouseClick
circles.Add(New Circle(New Point(e.X, e.Y), radiusRandomizer.Next(10, 100)))
Me.Invalidate()
End Sub
Private Sub FormPaint(sender As Object, e As PaintEventArgs) Handles Me.Paint
Dim g As Graphics = e.Graphics
g.Clear(Color.Black)
Using p As New Pen(Color.White)
For Each c In circles
g.DrawEllipse(p, c.Center.X - c.Radius \ 2, c.Center.Y - c.Radius \ 2, c.Radius, c.Radius)
Next
End Using
End Sub
Burada boya olay tüm kendisi tarafından oldukça sık ishal forma
üzerinde birkaç tıklama sonra alırsınız budur. zorlamak için, 'me.invalidate' veya 'me.refresh' – Plutonix
Her seferinde aynı şeyi boyadığı ve devam edeceği için, yeniden boyamaya zorlamak anlamsız görünüyor. – Plutonix
Boya olayı olmadan denediğimi yapabileceğim herhangi bir yol var mı? –