2012년 12월 19일 수요일

사용자정의 컨트롤 만들어보기 (ProgressBar)

C# 닷넷 컴포넌트의 ProgressBar가 있습니다.
닷넷 프로그래스바의 내부에 Text라던가 Label을 넣어
프로그래스바와 내부에 글자를 넣어 보겠습니다.
우리가 만들것은 아래의 그림과 같은 ProgressBar 사용자 정의 컨트롤 입니다.
추가 => 사용자 정의컨트롤을 선택하여 CProgressBar.cs 를 생성합니다.
이제 코딩을 시작해 봅시다.
우선, 디자인부분에서 프로그래스바와 내부에 위치할 Text를 가질 Label을 넣어줍니다.

하나의 TableLayoutPanel(열 두개)을 만들고
각 열에 Label을 만들어넣습니다(구분을 명확하게 하기위해 Color를 임의로 넣어준겁니다.)
TableLayoutPanel과 Label의 BackColor는 투명하게 해줍니다(TransParent)
코드를 살펴봅시다.

CProgressBa 생성자에 디자이너부분에서 만든 Label들의 ForeColor와 Font를 지정합니다.
(불필요한 작업같군요. 안해줘도 될거 같아요)
맴버 변수 선언부분입니다.
Pen pen은 열을 구분하기 위해 OnPaint시 사용할 Color입니다.
┌───────────┐
│                       │
└───────────┘빨간 구분선

protected 선언된 맴버변수는 디자이너의 속성창을 보면 생성되어져 보입니다.
속성창에서 값을 변경하게 되면 아래의 맴버변수들의 변경되는거지요.
protected로 선언되었으니 이를 대신 받아줄 get; set 변수들이 필요합니다.
아래에서 Value 즉 Percent값의 변경될때마다 Invalidate()를 호출하는데요
this.Invalidate()메소드를 호출할때마다 OnPaint()메소드를 재 호출 합니다
OnPaint 메소드를 오버라이드 해서 필요한 것을 그려주면 되는것이지요
ClientRectangle은 컨트롤 영역의 사각형을 가지고 계산식으로
Rectangle에 색깔을 입히게 되는겁니다.

댓글 없음:

댓글 쓰기