본문 바로가기
프로그래밍

[C#]사용자 정의 컨트롤로 디지털 시계 만들기

by minimax95 2020. 11. 5.

오늘은 디지털시계를 만들어 보겠습니다.

윈폼에 라벨을 올려서 간단하게 시계 기능을 만들기보다는 사용자 정의 컨트롤에서 디지털시계를 만들어서 재사용 가능하도록 만들어 보겠습니다.

먼저 윈폼 솔루션을 만들고 여기에 아래와 같이 새 항목 추가에서 사용자 정의 컨트롤을 선택해 줍니다.

이때 이름은 MyClock입니다.

사용자 정의 컨트롤이 추가되면 아래와 같이 솔루션에 MyClock 클래스와 사용자 정의를 할 수 있는 UserControl이 생성됩니다.

UserControl 바탕에 라벨 3개를 차례로 올려서 오늘 날짜와 시간을 표시할 수 있도록 구성해 줍니다.

바탕 크기를 조절해 주고 날짜와 시간의 기본 포멧 형태로 Label의 Text를 지정해 줍니다.

 

참고로 위 구성은 돋움체에 Bold, 12pt, 시간은 18pt로 포맷을 잡아주었습니다.

이제 소스코드를 작성할 차례입니다.

MyClock.cs에서 우클릭을 하여 코드보기를 클릭해 줍니다.

UserControl을 상속받은 MyClock에서 아래와 같이 Timer 객체와 멤버 변수들을 선언하고

Init( ) 메서드에서 초기화 해줍니다.

mTimer의 처리기(MTimer_Tick)에서는 깜빡임 효과를 고려해서 각 label들의 string 포맷을 잡아주고 

1초에 한 번씩 시간을 표출해 줄 수 있도록 정의해 줍니다.

public partial class MyClock : UserControl
{
    Timer mTimer = null;
    bool bCheck;

 

    public MyClock( )
    {
        InitializeComponent( );
        Init( );
    }

    private void Init( )
    {
        mTimer = new Timer();
        mTimer.Interval = 1000;

        mTimer.Tick += MTimer_Tick;

        mTimer.Start( );

    }

 

    private void MTimer_Tick(object sender, EventArgs e)

    {

        lb_Date.Text = string.Format("{0:yyyy.MM.dd(ddd)}", DateTime.Now);

        lb_AmPm.Text = string.Format("{0:tt)}", DateTime.Now);

    

        // 시계 깜빡임 효과 주기
        if (bCheck)
        {             

            lb_Time.Text = string.Format("{0:hh:mm)}", DateTime.Now); 

        }

        else

        {

            lb_Time.Text = string.Format("{0:hh mm)}", DateTime.Now); 

        }

        bCheck = !bCheck;   // 반전

    }

}

 

여기까지 완성이 되었다면 디지털시계 사용자 컨트롤 정의가 완료된 것입니다.

 

그럼 실제 폼에서 사용자 정의 컨트롤을 올려서 디지털 시계 기능을 탑재해 보겠습니다.

사용자 정의 컨트롤을 도구 상자에서 불러오려면 우선 솔루션을 빌드해야 합니다.

폼에서 도구 상자를 열어 우리가 정의한 MyClock 디지털시계를 드래그하여 좌측 상단에 배치시켜 줍니다.

솔루션을 실행하면 아래와 같이 나만의 디지털시계가 완성된 것을 보실 수 있습니다.

사용자 정의 컨트롤의 장점은 한번 만들어 두고 다른 솔루션에도 동일하게 적용할 수 있다는 점입니다.

아래의 MyClock 사용자 정의 컨트롤 소스코드를 복사해서 다른 프로젝트 폴더에 저장해 두고

존 항목 추가하기에서 MyClock.cs를 추가해 주면 .Designer.cs와 .resx 파일들은 자동으로 추가되어 사용할 수 있습니다. 물론 빌드를 먼저 해 주어야 도구 상자에서 다른 컨트롤처럼 사용할 수 있겠지요.

 

이상 포스팅을 마치겠습니다.

감사합니다.

 

반응형

댓글0