質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

2回答

608閲覧

プログラム初心者でvisual Studio で30分タイマーを作っています。

Kaipoto__f

総合スコア0

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2020/06/16 16:44

編集2020/06/17 00:46

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
スタートボタンを押すと30:00からカウントされ、
00:00になったらタイマーがストップして
リセットボタンをおすと30:00に戻るシステムを作りたい。
visual Studioを使い始めてまもないのでおしえてもらえるとありがたいです。

発生している問題
1の次に00と表示させたいのですが60になってしまいます。
あと、リセットをおすと30に戻るプログラムが分からなくて困っています。

該当のソースコード

ソースコード 途中までしかできていません。

コード ```using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp6 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { timer1.Start(); timer2.Start(); int val1 = int.Parse(PastTimeTBox.Text); val1--; PastTimeTBox.Text = val1.ToString(); if (val1 == 00) { timer1.Stop(); } int val2 = int.Parse(textBox1.Text); val2 += 59; textBox1.Text = val2.ToString(); } private void timer1_Tick(object sender, EventArgs e) { int val1 = int.Parse(PastTimeTBox.Text); val1--; if (val1 == 00) { timer1.Stop(); } PastTimeTBox.Text = val1.ToString(); } private void timer2_Tick(object sender, EventArgs e) { int val2 = int.Parse(textBox1.Text); val2--; if (val2 == 0) { val2 += 60; } textBox1.Text = val2.ToString(); } private void ResetButton_Click(object sender, EventArgs e) { } } }``` コード

試したこと

for文で0になると60を足すのを30回繰り返すと0で
止まるようになるかとしてみたのですができませんでした。

補足情報(FW/ツールのバージョンなど)

PastTimeTBoxに30min textBox1に00secから始まるように設定しています。
timer1がPastTimeTBoxとつながっていて1分ごとに減らすためにintervalを60000としています。
timer2がてtextBox1とつながっていてintervalは1000にしています。
0min0secになったらとまるようにしたいのですがtimer2が0min0secになっても59secになってとまりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YAmaGNZ

2020/06/16 22:57

コードは```と```で囲んでください。 また、PastTimeTBoxはどういう情報を保持しているのか、textBox1はどのような情報を保持しているのか、timer1やtimer2の間隔はどうなっているのか説明してください。
Kaipoto__f

2020/06/17 03:24

説明は追加したのですが不足している点がありましたらすいません。
guest

回答2

0

1の次に00と表示させたいのですが60になってしまいます。

ここだけ

val2--;

if (val2 == 0)
{
val2 += 60;
}

if (val2 < 0)
{
val2 += 60;
}

としましょう

投稿2020/06/16 22:25

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kaipoto__f

2020/06/17 00:15

1の次に00と表示されるようになりました。ありがとうございます。
y_waiwai

2020/06/17 00:35

まずは1800秒タイマを作りましょう。 それができたら、あとは残り秒数を、分:秒のかたちで表示すればいいだけの話になります
Kaipoto__f

2020/06/17 00:54

その場合はコードを最初から作り直した方がいいでしょうか?
y_waiwai

2020/06/17 01:06

作り直してみたらいいんじゃないかと。 とにかく組んでみることです。 VisualStudioのデバッグ機能を使って、1行づつ実行させるなどしてどういう動作になるのか確認しながらやっていくと、理解が早いと思いますよ
Kaipoto__f

2020/06/17 02:32

ありがとうございます。もう一つ質問したいのですがよろしいでしょうか?
guest

0

timer1とtimer2がそれぞれ何を行っているのか説明できますか?

理想としている機能に必要なタイマーでの処理は
1.残り時間からタイマー間隔の時間を引く
2.残り時間を表示する
これだけです。
多分、1秒間隔でのカウントダウンでしょうから、タイマーの間隔を1秒として
残り時間から1秒減らすという行為を行えばいいわけです。
表示に関しては、残り時間を秒数で変数に持っておいて、それを計算して分:秒の形にする。
気をつけるとすれば変数のスコープでしょうか。

リセットはボタンが押されたら残り時間の秒数を元に戻せばいいだけです。

投稿2020/06/16 22:21

YAmaGNZ

総合スコア10489

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問