티스토리 뷰

반응형

윈도우 폼을 이용해 개발을 하면

다양한 기능들을 많이 사용하게 되는데

그 중에서도 타이머란 컨트롤도 자주 사용하게 되는 편이다.

오늘은 타이머 컨트롤을 이용해서

아주 간단한 코드를 이용해서

특정 시간대에 프로그램이 작동할 수 있는 방법에 대해 소개하고자 한다.

참고로 개발 환경은

Visual Studio 2017이다.

------------------------------------

먼저

새 윈도우 폼 프로젝트를 하나 만들어 준다.

그리고 다음과 같이 라벨, 텍스트박스, 버튼, 타이머를 하나씩만 추가해준다.

타이머 컨트롤을 제외하고

라벨, 텍스트박스, 버튼은

사실 없어도 관계없긴 한데...

그래도 상태를 찍어주기 위해서

추가한 컨트롤이기 때문에

그런거 없어도 되면 굳이 추가 안해도됨.

그리고 코드를 다음과 같이 작성한다.

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 WindowsFormsApp1

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }



        private void Form1_Load(object sender, EventArgs e)

        {

            timer1.Interval = 1000;

        }



        private void timer1_Tick(object sender, EventArgs e)

        {

            DateTime date = DateTime.Now;



            if((date.Hour == 15 && date.Minute >= 10)

                && (date.Hour == 15 && date.Minute < 15))

            {

                label1.Text = $"현재시각 {date.Hour}시 {date.Minute}분 타이머는 " +

                    $"{timer1.Interval / 1000}초 간격으로 동작중입니다.";

            } else

            {

                label1.Text = $"현재시각 {date.Hour}시 {date.Minute}분 타이머는 정지되어 있습니다.";

            }

        }



        private void button1_Click(object sender, EventArgs e)

        {

            if (timer1.Enabled == false)

            {

                timer1.Enabled = true;

                label1.Text = $"타이머가 동작중입니다. interval은 {timer1.Interval/1000}초 입니다.";

            } else

            {

                timer1.Enabled = false;

                label1.Text = "타이머가 정지했습니다.";

            }

        }

    }

}

주요 코드를 잠시 설명하자면

타이머 이벤트가 발생할 때

DateTime 클래스에서 date란 이름의 변수를 하나 선언하고

if문에서 현재 시간(date.Hour)와 현재 분(date.Minute)을 부등호로

비교해서 해당하는 범위에 들어갈 경우 특정 동작이 일어나도록 하는 것이다.

여기서 부등호를 사용해서 비교가 가능한 것은

date.Hour와 date.Minute의 반환값이 int형이기 때문인데,

만약 DateTime.Now.toString("HHmm")을 사용하게 된다면 반환값이 string형이기 때문에

부등호를 사용한 비교가 불가능하게 된다.

DateTime.Now.toString("HHmm")을 사용하는쪽을 선택해야 한다면 이 부분에 대한 고려가 필요함.

이 부분을 참고해서

해당 시간대에 들어서면 작동하는 메소드를 제작하여 호출하는 방식을 따로 구현하면 된다.

그리고 else 분기점으로 잘 빠져나가는지를 확인하기 위해 label에 문구를 하나 찍어주면서

확인 하도록 해주었다.

(오해가 있을까봐.. 문구는 타이머가 정지되어 있다고는 했지만... 실제로 타이머를 정지시키진 않음...)

그리고 버튼의 클릭 이벤트는

타이머가 동작하고 있을때는 중지

타이머가 중지상태에서는 동작 하도록 코드를 작성했다.

위 코드를 실행시킨 결과는 다음과 같다


잘 동작하는 듯.

지금까지 타이머 컨트롤과 간단한 코드 몇줄로 구현한

특정 시간대에만 동작하는 프로그램이었음.

(내가 작성한 코드가 항상 정답은 아니며 다른 방식으로도 얼마든지 구현이 가능하다는 점도 참고~)



반응형
댓글
반응형
05-19 00:16
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함