タイトル : ダブルバッファを使わないサンプル 投稿日 : 2007/10/08(Mon) 14:58 投稿者 : 魔界の仮面弁士
> (目的)フォームにピクチャーボックス1(300×300)が有ります。 > 「10ヶづつ緑の四角をバッファに描画した後、画像に転送させる」 > 等速で行いたい。出来れば自作のサブプロシージャから好きなタイミングで呼び出したい。 『等速で』という部分が気になりますが、そういった要件であれば、 「ダブルバッファ」も「OnPaint」も関係なく、こんな感じで良いのではないかと。 Public Class Form1 Private rect(10) As Rectangle Private Sub DrawNext() Dim ran As New Random() For i As Integer = 0 To 10 rect(i) = New Rectangle(ran.Next(300), ran.Next(300), 10, 10) Next PictureBox1.Invalidate() End Sub Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load PictureBox1.Size = New Size(300, 300) DrawNext() End Sub Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As PaintEventArgs) Handles PictureBox1.Paint Dim b As Brush = Brushes.Green Dim g As Graphics = e.Graphics For Each r As Rectangle In rect g.FillRectangle(b, r) Next End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click DrawNext() End Sub Private Sub Button2_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button2.Click For n As Integer = 1 To 1000 DrawNext() PictureBox1.Update() Next End Sub End Class |