본문 바로가기

개발새발 개발자/C#

[C# GUI 프로그래밍] 전자 시계와 스톱워치 만들기

최종적으로 만들 예제는 위와 같다. 텍스트 박스를 쓰면 더 쉽게 구현 가능하지만, 리스트 박스 연습을 위해 리스트 박스를 사용한다.


- 구현 조건

1. 타이머 Interval

타이머 이벤트를 10ms 단위로 동작시킨다. 100분의 1초가 10ms이므로 10ms 단위로 타이머 이벤트를 발생시켜 밀리 초를 하나씩 증가시키면 된다.


2. 밀리초 초기화 및 초 값 업데이트

밀리초가 99에서 100이 되는 순간 100을 출력하지 않고 초를 ++해서 출력하고 0으로 초기화한다.


3. 리스트 박스 Remove

리스트 박스는 Add 하면 행이 추가가 되므로 초를 증가할 때마다 Remove를 동작시킨다.


4. 스톱워치 시작 버튼

밀리초 증가를 시작 버튼에 넣어야할지, 타이머 버튼에 넣어야할지 생각해봐야 한다. 결론부터 말하자면 타이머에 들어간다.


5. 스톱워치 중지 버튼

Enabled라는 파라미터의 값이 true냐 false냐에 따라 타이머 이벤트가 발생하거나 중단된다. 이 두 가지 state를 가지고 시작과 중지를 사용하면 된다.


- 주의 사항

컨트롤 Name을 바꾸면 코드에도 꼭 반영해주자.

public partial class Form1 : Form { int mSecond = 0; int second = 0; public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) {

           // 앞에서 말한 리스트 박스 처리는 타이머 이벤트에서 처리한다. listBoxmSecond.Items.Remove(mSecond-1); listBoxmSecond.Items.Add(mSecond); if(mSecond%2==0) { listBoxColon.Items.Add(":"); } else { listBoxColon.Items.Remove(":"); } mSecond++; if(mSecond==100)           // 밀리초 100이 되면 { listBoxmSecond.Items.Remove(mSecond-1);    // 1을 뺀 99를 삭제해준다. 현재 써있는 건 99이니까. listBoxSecond.Items.Remove(second);    // 밀리초가 100일 때 초를 올려줘야 하므로 기존 초를 삭제한다. second++;    // 초를 증가시키고 listBoxSecond.Items.Add(second);    // 다시 초를 추가한다. mSecond = 0;        // 밀리초는 0으로 초기화된다. } } private void timer2_Tick(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true;        // button1을 클릭하면 timer가 시작된다. } private void button2_Click(object sender, EventArgs e) { timer1.Enabled = false;        // button2를 클릭하면 timer가 정지한다. } }

- 추가 과제

1. 리셋 버튼 만들기

2. 오른쪽에 리스트 박스 만들고 랩타임 버튼을 체크할 때마다 쌓이는 기능 만들기