-
C# 윈폼 타이머를 이용한 스탑워치C# 2020. 8. 20. 15:57
타이머를 이용한 스탑워치 기능을 구현하기 위해서 timer를 두개 사용했다.
timer 1,2
timer1에는 단순한 덧셈연산만 하고 timer2에서는 조건문을 통한 label의 텍스트를 바꿔주는 부분을 넣었다.
timer1은 1/1000초마다 동작, timer2는 1/10초 마다 동작
덧셈 연산에서 지연이 발생하면 정확한 시간 측정이 어렵다.
전역변수로는
private int CountMS = 0; private int CountS = 0; private int CountM = 0; int a = 1; private bool Toggle = false;
밀리초 덧셈을 위한 CountMS
초 덧셈을 위한 CountS
분 덧셈을 위한 CountM
기록하면 앞에 들어갈 숫자인 a
시작 정지를 위한 toggle이다 false이면 멈춤, true면 시간 덧셈이 된다.
private void timer1_Tick(object sender, EventArgs e) { ++CountMS; if (CountMS == 60) { CountMS = 0; ++CountS; if (CountS == 60) { CountS = 0; ++CountM; } } } private void timer2_Tick(object sender, EventArgs e) { DispM.Text = CountM.ToString(); DispS.Text = CountS.ToString(); DispMS.Text = CountMS.ToString(); }
타이머의 틱 이벤트들이다. 지연을 줄이기 위해 timer2는 디스플레이만 담당, timer1은 시간연산만 담당
원래는 CountMS가 1000이어야 1초가되지만 각종 조건문과 연산 때문에 느려져서 대강 MS=60이면 1초라고 판단한다.
(이게 제일 엇비슷했다.)
초가 60이면 분이 올라가고 초가 0으로 초기화 되는 것을 볼 수 있다.
private void button1_Click(object sender, EventArgs e) { if(Toggle==false) { timer1.Start(); timer2.Start(); Toggle = true; } else { timer1.Stop(); timer2.Stop(); Toggle = false; } }
시작 정지버튼의 이벤트 메소드이다. Toggle의 조건에 따라 멈춰있다면 타이머가 시작하고, 타이머가 돌고 있다면 타이머를 멈춘다.
private void button2_Click(object sender, EventArgs e) { string str = ""; label1.Text += a.ToString()+". "+CountM.ToString() + " " + UnitM.Text + " " + CountS.ToString()+ " " + UnitS.Text+ " " + CountMS.ToString() + UnitMS.Text + " \n"; ++a; }
기록 부분이다. 대강 스톱워치에 기록버튼을 누르면 그 시간이 고대로 옆에 하나씩 기록되는 것을 볼 수 있다. 그런 느낌으로 만들었다. string에 하나씩 이어붙이는데 끝에 \n를 위치시켜서 줄바꿈을 해줬고, 순위가 나오도록 a를 사용했다.
private void button3_Click(object sender, EventArgs e) { timer1.Stop(); timer2.Stop(); Toggle = false; CountM = 0; CountS = 0; CountMS = 0; DispM.Text = CountM.ToString(); DispS.Text = CountS.ToString(); DispMS.Text = CountMS.ToString(); label1.Text = ""; a = 1; }
리셋 버튼이다. 시간을 재고있던 변수 다 0으로 만들고 타이머 2개 stop하고 토글도 false로 해준다. 기록해놓은 레이블도 다 날리고 순위를 저장해놓은 a도 1로 바꾼다.
'C#' 카테고리의 다른 글
C# 숫자야구 윈폼 (0) 2020.08.20 C# 윈폼 DateTimePicker와 Tab 컨트롤을 사용한 알람시계 (0) 2020.08.20 C# 기초 정리 (0) 2020.06.25 C# DB연동 (0) 2020.06.18 C# 윈폼 Chart 컨트롤 (0) 2020.06.18