C#을 이용한 프로그램을 하나씩 올려보려고 합니다
우선 첫번째로 간단하게 만들 수 있는 스탑워치를 만들어보겠습니다.
완성 프로그램 다운로드
1. 프로젝트 생성하기
File > New > Project 를 선택해서 새로운 프로젝트를 생성합니다.
왼쪽 트리창에서 Visual C#이 선택된 것을 확인하고, Windows를 선택하면 오른쪽에서 windows form appliciation 템플릿을 선택할 수 있습니다.
2. 폼 디자인 꾸미기
이제 스탑워치의 시간을 나타낼 부분과 시작/멈춤 버튼을 만들어야 합니다.
Toolbox에서 Lable을 끌어다가 폼에 올려놓습니다.
그리고 이 Lable의 이름을 변경해주어야 하는데요, 기본적으로 Lable1 이라는 이름으로 컨트롤이 생성되는데, Lable1, Lable2... 이런식으로 컨트롤을 많이 만들면 나중에 헷갈리게되니까...
lable인 경우 lb_목적 TextBox의 경우 tb_목적 과 같은 방식으로(혹은 자기만의 방식으로) 컨트롤의 이름을 생성하면 됩니다.
컨트롤의 이름(Name)을 바꾸더라도 컨트롤에 적혀있는 글씨(Text)은 바뀌지 않는데요 이걸 또 바꿔야겠죠?
프로그램을 켰을 때 label1 label2 label3 이라고 나오는 것 보단 스탑워치 답게 0 : 0 : 0 과 같은 식으로 나오면 좋겠죠?
lb_hour를 선택한 다음 properties 창에서 Text값을 찾은 후 아래와 같이 바꿔줍니다
lb_hour.Text : "0"
lb_min.Text : "0"
lb_sec.Text : "0"
그리고 글씨가 좀 컸으면 좋겠군요...font size를 크게 만들고싶군요...
properties창에서 [+]Font 라는 녀석을 찾아서 [+]를 클릭하면 Size가 나옵니다.
그냥 Size는 Label 컨트롤 자체의 크기를 의미하기 때문에 글씨크기는 커지지 않습니다.(영역만 넓어진다는 뜻이지요)
그리고 label을 두 개 더 추가해서 ":" 이 녀석을 나타내주면.....
이제 폼은 이런 모양을 하고있겠죠?
아..버튼이 어디서 났냐구요?-_-;; 잘 생각해서 버튼도 두 개 추가해주세요
저는 bt_start, bt_stop 이라는 이름으로 버튼을 생성했습니다.
3. 프로그램에 숨불어넣기!
Timer라는 녀석을 선택해보면 Properties 창에 Timer에 대한 속성이 나오는데요..
우리가 여기서 주목해야 할 것은 Enabled와 Interval 입니다.
프로그램이 시작하자마자 스톱워치가 동작하는게 아니라, Start 버튼을 누르면 스톱워치가 동작하게 할 거니까... 우선 이녀석은 비활성화시켜야겠군요 그렇다면 Timer1.Enabled = false로 해 두죠.
(제가 아까부터 Timer1.Enabled 라던지..lb_hour.Text 라던지... (.)을 이용해서 속성을 이야기 하는데.. 이는 실제로 나중에 코드를 입력할 때 사용되는 방식입니다. 이따 다시 설명드리겠습니다.)
그리고 Interval이라는 녀석! 이벤트가 발생하는 시간단위를 말하는데요... 우리는 1초에 한 번씩 시간이 바뀌도록 하는 스탑워치를 만들거니까... Timer1.Interval = 1000; 이라고 설정합니다.(1000ms = 1초..가 되는거죠)
자...이제 제대로 코드를 짜볼까요?
폼 아랫부분의 시계모양(timer1)을 더블클릭하면, 1초에 한번씩 어떤 일을 할건지를 명령하는 코드를 입력하게 됩니다.
여기에 아래와 같이 넣어봅시다.
코드를 보면...
lb_sec.Text = (~~~) --> lb_sec라는 녀석의 Text를 (~~~)로 바꾸어라!라는건 알겠죠?
하지만 우변을 보면 조금 난해합니다...
(Convert.ToInt32(lb_sec.Text) + 1).ToString();
부분 부분 나눠서 보면...
Convert.ToInt32(lb_sec.Text) >>lb_sec의 Text값(초기값 = 0으로 설정해줬죠?)을 32비트의 정수형으로 변환하여라. Label에 보여지는 값은 정수형이 아니라 문자열(string)형태입니다. 이 녀석을 1초에 한 번씩 1씩 더하기를 하려면, 정수형으로 변환할 필요가 있겠죠. 그래서 Convert.ToInt32() 라는 녀석을 쓰는 겁니다.
그러면 이제 Label에 들어있던 녀석은 문자열 "0" 에서 정수형 0 으로 바뀌었습니다.
이젠 여기다가 +1 을 해줄 수 있겠죠?
마지막 ToString() 이 의미하는 것은 쉽게 유추가 되죠? label의 text에는 문자열만 들어갈 수 있는데, 지금 연산한 값은 정수형이니까...이 정수형 값을 다시 문자열로 바꾸는 역할을 해주는 함수입니다.
0. lb_sec에 입력된 값(문자열 "0")을 불러온다.
1. 문자열 "0"을 정수형 0으로 변환한다.
2. 변환된 정수형 값 0에 1을 더한다.
3. 1이 더해진 정수형 값을 다시 문자열로 변환한다.
4. lb_sec에 연산된 값을 입력한다.
아까 timer1.Enabled = false; 라고 설정해두었으니...방금 입력한 명령이 실행되지 않는 것입니다.
다시 폼 디자인하는 창으로 넘어가서 시작버튼(bt_start)를 더블클릭 해서 버튼에 명령을 입력합니다.
그렇다면...60초가 되면 lb_min이 1씩 증가하고, lb_sec는 다시 0으로 돌아오는 알고리즘을 넣어야겠군요!!
timer1에 입력된 명령을 수정해볼까요?
(1분 기다리지 마시구요...timer1.Interval = 10 정도로 짧게 하시면 0.01초에 한 번씩 1초가 증가하는 걸 확인할 수 있습니다^_^)
그럼 이제 마지막으로... lb_min이 60분이 되면 0으로 바뀌고 한 시간 증가하도록 코드를 짜고 완성시켜보죠!
'자기전엔 전기전자 > ZUN장군의 허접 C# 강좌' 카테고리의 다른 글
| C#에서 DEFINE 사용하는 방법 (0) | 2010/11/19 |
|---|---|
| C# 세자리 마다 콤마(,) 찍는 함수 (1) | 2010/09/14 |
| VS2008 C# 응용프로그램 배포버젼(설치버젼) 만들기 (0) | 2010/09/11 |
| VS2008에서 C# .netframework3.5와 함께 배포하는 법(MSDN) (0) | 2010/09/10 |
| 디버깅 오류: "잘못된 크로스 스레드 작업: '컨트롤 이름' 컨트롤이 자신이 만들어진 스레드가 아닌 다른 (0) | 2010/05/27 |
| C#] Timer를 이용한 스톱워치(stopwatch) 만들기 (0) | 2010/05/16 |
| 리치텍스트박스(richTextBox)에서 한 줄씩 읽어오기 (0) | 2010/05/12 |
| C# usb 시리얼포트 찾기(콤보박스에 자동 추가) (0) | 2010/05/06 |
| MS VisualStudio 2010 무료다운로드(DreamSpark) (0) | 2010/04/24 |
| C#, serialport에서 바이트 수신 시 무한루프에서 빠져나오는 방법 (0) | 2010/03/26 |
| unsigned long의 크기 (1) | 2010/03/22 |



001 Timer.exe