投稿者 H_K  (社会人) 投稿日時 2009/9/15 20:21:46
八王子5517さん、この前の書き込みの後、とりあえずクラスを作らずペイントで描いたらどうなるかやってみました。講座のサンプル以外自分でクラスを作ったことがないので、クラスの方はこれからです。
AutoGraphics メソッドだと前描いたのが残っているのに、paint イベントだと毎回クリアされちゃうんですね。細かい修正が必要でした。
これだと元々の講座のサンプルのようにピクチャーボックスを3つ使った方がよかったかもしれません。

サイコロ描画の部分だけ抜き出してみました。長くてすみません。

[CODE]
Public Class Form1
    Dim Rnd As New Random
    Dim watch As New Stopwatch
    Dim Mydice(2) As Integer

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        'Panel1の中にPictureBox1を配置。位置は適当に
        '他にButton1とlabel1, タイマーが3つ

        Panel1.Size = New Size(259, 119)
        Panel1.BorderStyle = BorderStyle.Fixed3D
        Panel1.BackColor = Color.FromArgb(0, 192, 0)
        PictureBox1.Size = New Size(221, 61)

        '最初はピンゾロ表示
        For i As Integer = 0 To 2
            Mydice(i) = 1
        Next
        PictureBox1.Invalidate()

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        watch.Reset()
        watch.Start()
        Timer1.Interval = 20
        Timer2.Interval = 20
        Timer3.Interval = 20
        Timer1.Start()
        Timer2.Start()
        Timer3.Start()

    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        '1秒たったら表示をスローに
        Static tcount As Integer = 50
        If watch.Elapsed.Seconds >= 1 Then
            tcount += 50
            Timer1.Interval = tcount
        End If
        'インターバルが500になったら表示決定
        If tcount >= 500 Then
            Timer1.Stop()
            tcount = 50
            Label1.Text = "チン"
        End If
        '目をランダムに表示
        Mydice(0) = Rnd.Next(1, 7)
        PictureBox1.Invalidate()
    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
        '2秒たったら表示をスローに
        Static tcount As Integer = 50
        If watch.Elapsed.Seconds >= 2 Then
            tcount += 50
            Timer2.Interval = tcount
        End If
        If tcount >= 500 Then
            Timer2.Stop()
            tcount = 50
            Label1.Text = "チンチロ"
        End If

        Mydice(1) = Rnd.Next(1, 7)
        PictureBox1.Invalidate()
    End Sub

    Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick
        Static tcount As Integer = 50

        '3秒たったら表示をスローに
        If watch.Elapsed.Seconds >= 3 Then
            tcount += 50
            Timer3.Interval = tcount
        End If

        Mydice(2) = Rnd.Next(1, 7)
        PictureBox1.Invalidate()

        If tcount >= 500 Then
            Timer3.Stop()
            tcount = 50
            Label1.Text = "チンチロリ~ン"
        End If
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        e.Graphics.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
        For i As Integer = 0 To 2
            SaikoroDraw(Mydice(i), i, e.Graphics)
        Next
    End Sub
[/code]
続く