|
魔界の仮面弁士さま、ご回答ありがとうございました。 いろいろ勉強になりました。一応解決と判断しました。
> 基本的に、CreateGraphics は使用すべきではありません。 > 通常は Paint イベントを利用し、e.Graphics に対して描画処理を記述すべきです。
確かにそうでした。そうしないと描画がはがれおちてしまうのを忘れてました。
> たとえば、各処理を細かく分割しておき、Timer の Tick イベントで、少しずつ処理を > 進めていくという手法があります。この手法は、時計やアニメーション処理などで利用できます。
今回、緩やかに増加していく変数というものが表現できなかったのですが、やはりfor文をつかったのがまずかったようです。 for文のしょりのなかで、描画タイミングを拾うのではなく、ゆるやかに増加していく変数を使って描画をしていく方向ですすめてましたが timerをつかってわりと単純に解決できました。お手数おかけしました。
Dim p As Single
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
Dim rect As Rectangle rect = New Rectangle(21, 21, p, 6)
e.Graphics.DrawRectangle(Pens.Black, 20, 20, 70, 7) e.Graphics.FillRectangle(Brushes.LimeGreen, rect)
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If p < 40 Then p = p + 0.5 ElseIf p >= 40 And p < 50 Then p = p + 0.1 ElseIf p >= 50 And p < 60 Then Me.Timer1.Interval = 20 p = p + 0.1 Label1.Text = p ElseIf p >= 60 And p < 65 Then Me.Timer1.Interval = 60 p = p + 0.1 Label1.Text = p End If
PictureBox1.Invalidate()
If p > 65 Then Timer1.Stop() End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Timer1.Interval = 10 Me.Timer1.Start()
End Sub
変化量に変化をもたせる為余計な条件があり、長方形が小さいのは実装予定の為です。
|