이번 글에서는 WinForm에서 타이머를 사용하여 현재 시간을 출력하는 방법에 대해 간단하게 알아보겠습니다.
타이머 추가
우선 WinForm에서 타이머를 사용하기 위해서는 도구 상자에서 Timer를 드래그 하여 폼에 드랍하면 아래와 같이 추가가 됩니다.
이 타이머의 속성을 아래와 같이 입력합니다. Interval은 주기를 의미하며 단위는 밀리초입니다.(1000 입력 시 1초)
속성 | 입력 값 |
---|---|
(Name) | numInterval |
Interval | 1000 |
그리고 아래와 같이 Tick 이벤트 함수를 하나 생성해줍니다.
이 타이머의 Start 함수를 호출하면 tmTest_Tick 함수가 정해진 주기마다 호출되고 Stop 함수를 호출하면 타이머가 종료 됩니다.
기타 컨트롤 추가
폼 디자인 창을 열어 아래와 같이 컨트롤을 배치합니다.
이제 컨트롤의 속성을 설정해보겠습니다. 우선 Label을 아래와 같이 속성을 설정해줍니다. Name을 제외한 나머지 속성은 표시를 깔끔하게 하기 위해 입력한 값이므로 개인 취향에 맞게 설정하셔도 됩니다.
속성 | 입력 값 |
---|---|
(Name) | lbDisp |
AutoSize | FALSE |
BackColor | DimGray |
BorderStyle | FixedSingle |
ForeColor | Transparent |
Text | Display Time |
TextAlign | MiddleCenter |
그 다음으로 NumericUpDown에 대한 속성을 아래와 같이 설정합니다.
속성 | 입력 값 |
---|---|
(Name) | numInterval |
Increment | 10 |
Maximum | 10000 |
Minimum | 10 |
Value | 1000 |
타이머를 설정하기 위한 값들이니 이 속성은 맞춰서 해주셔야 합니다.
현재 시간을 라벨에 출력하는 함수 작성
DateTime 구조체를 사용하면 현재 시간을 얻을 수 있습니다. 현재 시간을 라벨에 출력하는 DisplayCurrentTimeToLabel 함수를 생성해줍니다. 그리고 아래와 같이 코딩해줍니다.
// 현재 시간을 라벨에 출력
private void DisplayCurrentTimeToLabel()
{
DateTime now = DateTime.Now;
string strNow = now.ToString("yyyy-MM-dd HH:mm:ss:fff");
lbDisp.Text = strNow;
}
이렇게 만들어준 DisplayCurrentTimeToLabel 함수를 타이머 Tick 이벤트 함수에 추가해 줍니다.
private void tmTest_Tick(object sender, EventArgs e)
{
DisplayCurrentTimeToLabel(); // 현재 시간 표시
}
그리고 폼 Load 이벤트 함수에 아래와 같이 호출하면 프로그램 실행 할 때도 현재 시간을 바로 표시할 수 있습니다.
private void Form1_Load(object sender, EventArgs e)
{
DisplayCurrentTimeToLabel(); // 현재 시간 표시
}
타이머 시작, 종료 함수 호출
버튼을 더블 클릭하여 각 버튼 클릭 이벤트 함수에 아래와 같이 코딩합니다.
private void btnStart_Click(object sender, EventArgs e)
{
tmTest.Interval = Int32.Parse(numInterval.Value.ToString()); // 주기 설정
tmTest.Start(); // 타이머 시작
}
private void btnStop_Click(object sender, EventArgs e)
{
tmTest.Stop(); // 타이머 종료
}
실행해서 동작을 확인해봅니다.
msdn : https://learn.microsoft.com/ko-kr/dotnet/api/system.windows.forms.timer?view=windowsdesktop-9.0
github : https://github.com/3001ssw/c_sharp/tree/main/WinForm/Timer/WinFormsApp1