TimerをLabelに、表示したい 2008 Express

タグの編集
投稿者 winvis  (学生) 投稿日時 2009/8/23 10:22:39
Timer部品を使って、ゲームの残り時間を、計測しているのですが
そのTimerが計測している時間をlabel部品でユーザーに表示するようにしたいのですが・・・
どうすればいいでしょうか?
「残り時間:」みたいに
投稿者 ゆきと  (中学生) 投稿日時 2009/8/23 10:54:31
こんな感じですか?
見ずらくてごめんなさい
    Private cnt As Integer
    Private Sub Form1_Load(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles MyBase.Load
        cnt = 50 '残り時間 
        Timer1.Interval = 100 'タイマーが進む感覚 
        Timer1.Start()
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Timer1.Tick
        If cnt > 0 Then
            cnt -= 1
            Label1.Text = "残り時間:" & cnt
        Else
            Label1.Text = "0になりました"
        End If
    End Sub
投稿者 TimerをLabelに、表示したい 2008 Express  (学生) 投稿日時 2009/8/23 11:45:10
迅速が返答に感謝です(嬉)
このソースの処理の仕方(アルゴリズム?)をもう少しお教えいただければ・・・
いままで、do~loopで、書き換えていたもので・・・「使わないなら、どうやって・・・・??」
って、なっているもので・・・・・
学生なのに、理解力弱くてすいませんorz
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/8/23 21:19:29
さらに細かく表示してみたり。

Private startTime As Date
Private finishTime As Date

Sub Form1_Load(ByVal sender As ObjectByVal e As EventArgs) Handles MyBase.Load
    '現在時刻の 12.34秒後を完了時刻とする 
    startTime = Now()
    finishTime = startTime.AddSeconds(12.34)

    Timer1.Interval = 55
    Timer1.Start()
End Sub

Sub Timer1_Tick(ByVal sender As ObjectByVal e As EventArgs) Handles Timer1.Tick
    Dim currentTime As Date = Now()
    Label1.Text = String.Format("開始時刻:{0:yyyy/MM/dd HH:mm:ss.ffff}", startTime)
    Label2.Text = String.Format("現在時刻:{0:yyyy/MM/dd HH:mm:ss.ffff}", currentTime)
    Label3.Text = String.Format("完了時刻:{0:yyyy/MM/dd HH:mm:ss.ffff}", finishTime)

    Dim elapsedTime As TimeSpan = currentTime - startTime
    Dim passedTime As TimeSpan = finishTime - currentTime

    Label4.Text = String.Format("経過時間:{0}", elapsedTime)
    Label5.Text = String.Format("残り時間:{0}", passedTime)

    If currentTime >= finishTime Then
        Timer1.Stop()
    End If
End Sub
投稿者 (削除されました)  () 投稿日時 2009/8/24 00:53:53
(削除されました)
投稿者 (削除されました)  () 投稿日時 2009/8/24 04:00:36
(削除されました)
投稿者 太郎冠者  (社会人) 投稿日時 2009/8/24 04:30:19
>このソースの処理の仕方(アルゴリズム?)をもう少しお教えいただければ・・・

処理の仕方、と言うほど御大層なもんじゃないですけど
TimerコントロールのTickイベントは、TimerコントロールのEnabledプロパティがTrue、かつIntervalが0より大きい値に設定されている場合に、Intervalに設定した時間が経過する度に発生します

例えばIntervalに1000(単位はミリ秒)をセットすると、1秒経過する度にTickイベントが発生します
適当な数値(例えば100)をLabelに表示して、Tickイベント内で「Labelの値-1」を新たにLabelに表示してやれば1秒経過する度に100、99、98・・・とカウントダウンされていきます。

イベントドリブンの理解が浅いとイメージし難いかもしれないので、とりあえず下記講座を読んでみて下さいな
http://homepage1.nifty.com/rucio/VBNyumon/BEGIN4.htm
投稿者 TimerをLabelに、表示したい 2008 Express  (社会人) 投稿日時 2009/8/24 10:14:37
みなさん、ありがとうございます
おかげさまで、無事、解決できました
この馬鹿のためにわかりやすいコードを乗せていたただきありがとうございます
投稿者 流れ者  (社会人) 投稿日時 2009/8/24 18:53:16
こんにちは。

>この馬鹿のためにわかりやすいコードを乗せていたただきありがとうございます 
そんなに自分を卑下する必要はありません。

たとえ簡単な処理でも、それを使ったことが無ければ、解らないのも当然です。

大事なのは、教えてもらったことを、自らの知識とし、
同じ質問を2度繰り返さないことだと、私は思います。
投稿者 (削除されました)  () 投稿日時 2009/8/24 20:39:02
(削除されました)
投稿者   (社会人) 投稿日時 2009/8/24 21:49:44
おかしなところがあったので書き直しました。失礼しました。

Dim count As Integer
    Const max As Integer = 100
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        count -= 1

        If count < 0 Then
            Label1.Text = "時間ぎれです"
           
        Else
            Label1.Text = "残り" & count.ToString & "秒"

        End If



    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Timer1.Enabled = Not Timer1.Enabled
        If Timer1.Enabled = True Then
            count = max
            Button1.Text = "ストップ"
        Else
            Button1.Text = "スタート"
        End If