C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: timer処理について


(過去ログ 134 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■79215 / inTopicNo.1)  timer処理について
  
□投稿者/ ひろみ (6回)-(2016/03/16(Wed) 16:31:17)

分類:[VB.NET/VB2005 以降] 

以下のような処理を行っています。
timer1を使って30秒間隔で処理を繰り返しています。
C1には 0〜9までの数字が入り、その数字の画像データが表示されるようになっています。

Private Sub preview_num()

  ’省略


 Timer1.Enabled = False

'演出
Timer2.Interval = 30 '1秒
y = 0

Timer2.Enabled = True
★ここで Timer2の処理を実行させたい

PictureBox1.ImageLocation = "D:\pic\" & C1 & ".png"

Timer1.Enabled = true


End Sub

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

Call preview_num()

End Sub


数字が表示される処理の前に 数字がベストテンのようにパタパタと入れ替わる演出を行いたく timer2を追加しました。
Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick


'演出処理
PictureBox1.ImageLocation = "D:\pic\" & Strings.Right(y, 1) & ".png"

If y = 200 Then Timer2.Enabled = False

y = y + 1

End Sub


Timer2.Enabled = True の処理で即、演出が行われてほしいのですが、それが上手く動きません。

timer1の中でtimer2の演出が上手く働くにはどのようにしたら宜しいのでしょうか。



引用返信 編集キー/
■79216 / inTopicNo.2)  Re[1]: timer処理について
□投稿者/ shu (840回)-(2016/03/16(Wed) 17:02:22)
No79215 (ひろみ さん) に返信

timerは1つで処理した方がよいです。

Private _cnt As Integer = 0

Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    _cnt += 1
    Select Case _cnt
        Case 1 To 20
           '--- Timer2想定の処理
        Case Else
           '--- TImer1想定の処理
           
           _cnt = 0
    End Select
End Sub


引用返信 編集キー/
■79217 / inTopicNo.3)  Re[1]: timer処理について
□投稿者/ kiku (87回)-(2016/03/16(Wed) 17:22:37)
timer1イベントもtimer2イベントも同じUIスレッド上で動作するため、
同時には動作しません。(入れ子にできない)
表示させるためには、timer1イベントまたはtimer2イベントの終了させ、
その後の描画イベントを実行できる期間を作ってあげる必要があります。

やりたいことに合致していないかもしれませんが
下記貼っておきます。
※デバックしていません。

Public Class Form1
    Dim C1 As Integer
    Dim y As Integer

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        Timer1.Interval = 30 * 1000
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
        y = 0
        Timer2.Interval = 100
        If Timer2.Enabled = True Then
            'timer2動作中なら何もしない
        Else
            'timer2動作してないなら起動
            Timer2.Enabled = True
        End If
    End Sub

    Private Sub Timer2_Tick(sender As System.Object, e As System.EventArgs) Handles Timer2.Tick
        If y = 200 Then
            '最終画像
            Timer2.Enabled = False
            PictureBox1.ImageLocation = "D:\pic\" & C1 & ".png"
        Else
            '演出
            PictureBox1.ImageLocation = "D:\pic\" & Strings.Right(y, 1) & ".png"
        End If
        y = y + 1
    End Sub
End Class

引用返信 編集キー/
■79221 / inTopicNo.4)  Re[2]: timer処理について
□投稿者/ ひろみ (8回)-(2016/03/16(Wed) 23:46:37)
kiku様 shu様 ご回答ありがとうございます。

初めてtimerを使用して困っておりましたが、理想通りに動作できました。
勉強になりました。
ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -