NGMsoftware

NGMsoftware
로그인 회원가입
  • 매뉴얼
  • 팁 앤 테크
  • 매뉴얼

    팁과 테크니컬 노하우를 확인하세요.

    팁 앤 테크

    팁과 테크니컬 노하우를 확인하세요.

    본 사이트의 컨텐츠는 저작권법의 보호를 받으므로 무단 복사, 게재, 배포 등을 금합니다.

    디자이너 디자이너 플레이 시간 표시하는 방법.

    페이지 정보

    본문

    안녕하세요. 엔지엠소프트웨어입니다. 디자이너는 사용자가 직접 플레이어를 제작할 수 있도록 도와주는 콤포넌트 & 프레임워크입니다. 디자이너 이용 고객분들이 궁금해하는 내용중에 하나가 얼마나 동작했는지 시간을 계산할 수 있는지입니다. 이 내용을 따라하다보면 어느새 타이머 기능을 완성할 수 있을겁니다. 우선 아래와 같이 플레이어를 디자인하세요. 그리고 우측 하단에 라벨(레이블)을 하나 추가해줍니다. 텍스는 00:00:00으로 초기 설정하세요^^

    참고용 소스는 첨부파일에서 다운로드 받으세요.

    axjj4HC.png

     

     

    F7을 눌러서 소스 보기로 이동합니다. 그리고 아래와 같이 코딩되어 있을텐데요. 19라인과 22~25라인을 추가 해주세요. 참고로, 19라인에서 += 까지 입력하고 탭키를 두번 누르면 이벤트 핸들러가 자동으로 추가됩니다.

    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 DesignTest
    {
        public partial class Form1 : NGM.GUI.ComponentMetro.MainView
        {
            public Form1()
            {
                InitializeComponent();
    
                Load += Form1_Load;
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                throw new NotImplementedException();
            }
        }
    }

     

     

    이제 타이머와 스톱워치를 추가해야 합니다. 타이머는 사용자가 지정한 시간마다 틱(Tick)을 발생시켜줍니다. 틱은 이벤트 핸들러로 전달해주게 됩니다. 그리고, 스톱워치는 시간을 표시하기 위한 용도로 사용됩니다. 아래 코드를 보면 알겠지만, new System.Timers.Timer(1000)으로 초기화하고 있습니다. 따라서 타이머는 1초마다 틱을 발생시키게 됩니다.

        public partial class Form1 : NGM.GUI.ComponentMetro.MainView
        {
            private System.Timers.Timer _tm = new System.Timers.Timer(1000);
            private System.Diagnostics.Stopwatch _sw = new System.Diagnostics.Stopwatch();

     

     

    위에서 새롭게 추가된 폼 로드 이벤트 핸들러에 아래 코드를 추가하세요. 여담이지만~ 프라이빗(Private) 맴버는 이름 앞에 언더스코어를 붙여주기도 합니다. 상수는 대분자로 표시하죠. 이런 네이밍룰을 잘 따라준다면, 다른 사람의 코드를 보더라도 쉽게 이해할 수 있게됩니다. 상수는 MY_TIMER_NAME와 같이 씁니다.

            private void Form1_Load(object sender, EventArgs e)
            {
                _tm.Elapsed += _tm_Callback;
                _tm.AutoReset = true;
                _tm.Start();
                _sw.Start();
            }
    
            private void _tm_Callback(object sender, ElapsedEventArgs e)
            {
                throw new NotImplementedException();
            }

     

     

    tm_Callback 이벤트 핸들러도 추가해주세요. 그리고, 아래와 같이 코드를 추가해줍니다.

            private void _tm_Callback(object sender, ElapsedEventArgs e)
            {
                this.BeginInvoke((Action)delegate
                {
                    metroLabel1.Text = String.Format("{0:00}:{1:00}:{2:00}", _sw.Elapsed.Hours, _sw.Elapsed.Minutes, _sw.Elapsed.Seconds);
                });
            }

     

     

    이렇게해서 간단하게 작업이 완료되었습니다. 이제 실행한 후 정상적으로 시간이 흐르는지 확인해보세요^^;

    8lhEbkF.gif

     

     

    우측 하단에 시간이 흐르는게 보이죠? 이걸 이용하면 여러가지 효과를 추가할 수 있습니다. 물론, 원한다면 시간제로 제품을 운영할 수도 있습니다. 쓰이진 않지만요^^; 실무에서는 외부 데이터베이스의 시간 동기화를 이용합니다. 프로그램 내부에 있는 시간은 위변조가 쉽기 때문입니다. 대부분의 개발자가 프로그램을 만드는데 20프로의 노력이 든다면 내 프로그램을 보호하는데 80프로를 사용합니다. 이건 저도 마찬가지입니다. 라이센스를 모두가 구매해주면 좋겠지만... 어쩔 수 없는 부분이죠. 최소한의 안전장치는 마련해야 하기 때문입니다.

    THtdfDv.gif

    • 네이버 공유하기
    • 페이스북 공유하기
    • 트위터 공유하기
    • 카카오스토리 공유하기
    추천0 비추천0

    첨부파일

    댓글목록

    등록된 댓글이 없습니다.