• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Timerのカウントダウンのしかたを教えて下さい!)

Timerのカウントダウンの方法を教えてください!

このQ&Aのポイント
  • 「Timer」を使用して「1秒毎」にカウントダウンさせる方法を教えてください。
  • 現在はボタン操作でカウントを始めるプログラムを作成していますが、計算がうまくいかないようです。
  • 具体的な要件として、テキスト内の数値を[0・・59・・58・・」の順にカウントさせたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

btnStartのClickイベントを btnStart.Enabled = False tm = Now.AddHours( numHour.Value ) tm = tm.AddMinits( numMinute.Value ) ts = Now - tm txtHour.Text = ts.Hours.ToString() txtMinuts.Text= ts.Minuts.ToString() txtSecond.Text = ts.Second.ToString() Timer1.Enabled = True とします ・・・ 他の部分はコメントアウトしておくなどしましょう Timer1のTickイベントを ts = tm - now txtHour.Text = ts.Hours.ToString() txtMinuts.Text= ts.Minuts.ToString() txtSecond.Text = ts.Second.ToString() if ts.TotalSeconds < 1 then   Timer1.Enabled = False   btnStart.Enabled = True end if とします ・・・ Clickイベント同様に他の部分はコメントアウト dim ts as TimeSpan, tm as DateTime を『Public Class Form1』の次の行ぐらいに記述します といった具合でどうでしょう Nowは VBの組み込みプロパティで .NETのオブジェクトでいうと DateTime.Nowになります tm = Now.AddHours( numHour.Value ) は 現在に時刻に numHourの値を時間として加えた時刻を tmに代入することになります 19:00に numHourが2だった場合 21:00が設定されます tm = tm.AddMinutes( numMinute.Value ) は tmの時刻に numMinuteの値を分として加算した値を tmに再設定します 21:00に numMinuteが30だった場合 21:30をtmに設定します ts = tm - Now はClickイベントで設定されたカウントダウン完了時刻(tm)から現在の時刻を減算した結果を取得します TimeSpan型には時間の24進や分、秒の60進の計算を内部でしてくれるので HoursやMinutes,Secondsなどで時、分、秒を簡単に取得できます また TotalSecondsで秒単位での取得も可能です TotalSecondsが1未満ということは予定したカウントダウンが終了したということになります MSDNなどで わからないプロパティやオブジェクトは検索するようしましょう

参考URL:
http://msdn.microsoft.com/ja-jp/library/system.datetime.addhours(VS.80).aspx
palsu
質問者

お礼

返事遅れてしまいました、申し訳ございません!! この回答に記載されているプログラムを試しましたところ、無事にカウントさせることができました☆ ありがとうございます。とてもわかりやすい説明をして頂き感謝しています。 アドバイスも参考にさせていただきます、何から何まで本当にありがとうございました。 重ねて御礼申し上げます。わがままを言ってしまい申しわけありませんでした。 ではこれで失礼いたします。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

こんなに複雑にしなくてもいいように思いますよ TimeSpanクラスを使ってやればいいでしょう クラスのグローバル変数として dim ts as TimeSpan, tm as DateTime を宣言しておきます btnStartのClickイベントで btnStart.Enabled = False ' 1時間なら tm = now.AddHours(1) ts = tm - now txtHour.Text = ts.Hours txtMinuts.Text= ts.Minuts txtSecond.Text = ts.Second Timer1.Enabled = True Timer1のTickイベントで ts = tm - now txtHour.Text = ts.Hours.ToString() txtMinuts.Text= ts.Minuts.ToString() txtSecond.Text = ts.Second.ToString() if ts.TotalSeconds < 1 then   Timer1.Enabled = False   btnStart.Enabled = True end if といった具合で ・・・

palsu
質問者

お礼

早速回答ありがとうございますm(_ _)m 一応試してみたのですが、元の値をいじりすぎてこんがらがってしまいます(汗 Clickイベントの(' 指定されたタイマーを秒単位で記憶 WaitSecond = WorkingHour * 60 + WorkingMinute * 60 + WorkingSecond)やTickイベントの(' タイマーカウント行う処理 SecCount = SecCount - 1 Smhplass = SecCount)などの変数は残したまま記述しても問題ないでしょうか? ちなみに教えて頂いた記述を入力した箇所ですが「dim ts as TimeSpan, tm as DateTime」は「Public Class Form」のすぐ下に記述しました。 その上で「btnStart」のClickイベントで「btnStart.Enabled = False」のすぐ下から↓ ' 1時間なら tm = now.AddHours(1) ts = tm - now txtHour.Text = ts.Hours txtMinuts.Text= ts.Minuts txtSecond.Text = ts.Seconds Timer1.Enabled = True を記述しました。 Timer1のTickイベントには回答くださった式をイベント内の適当な場所に記述しました。 ・・がうまく作動しませんでした。多分いろんな式が混ざってしまっているので誤作動を起こしているのだと思います。 長くなりますので別のフォームでつづきを書かせて頂きます。申し訳ありませんm(_ _)m

palsu
質問者

補足

先ほどのつづきですm(_ _)m プログラムは始めたばかりなので、「Now.AddHours(1)」など見たことのない記述が目に入ったのですが、「Now」は日本語に直すと「現在」ですから、「tm = 現在時間を1づつ上げていく値」「ts = 1ずつ上がっていく値 - 現在時刻」 という風な解釈をしているのですが、式によって「=」は代入するものと等しいものと分かれていると聞きました。 その辺の区別がまだあまりつかない状態ですが、教えて頂いた「TimeSpanクラス」を使用するにあたって最初に投稿した記述からいらない値や変数がありましたらお時間のあるときにでもご指導していただけたらありがたいです。 フォームのデザインは上から「TextBoxが横ならびで3つ(時間・分・秒を表すBoxです)」とそのすぐ下に「NumericUpDownが横ならびで二つ(ここで指定した時間をTextBoxに表示される様にしています)」とその下にスタートボタンがあります。 長々と書いてしまって、本当にすいませんm(_ _)m 回答ありがとうございました。

関連するQ&A