본문 바로가기
  • 읽고보고쓰고
PROGRAMMING/C#

CS CustomControl Part1

by 체리그루브 2012. 2. 22.
728x90

 

1. Basis

특징

C#에서의 Custom Control 기능은 VC에서의 Control 제작방식에 비하여 많은 장점과 유용성을 지닌다. C#에서는 기존의 System.Windows.Form에 소속된 각 컨트롤을 상속하여 쉽게 새로운 컨트롤을 파생시킬 수 있다. 또한 VC와는 달리 다수의 컨트롤의 조합으로 이루어진 하나의 Form 자체를 컨트롤로 생성할 수 있다. (VB에서는 지원됨) C#에서는 이러한 Form 단위의 Custom ControlUser Control이라고 한다. 또한 이러한 기법을 이용하여 작성된 Custom Control은 별도의 Assembly로 제작하여 C#Assembly 참조 기능을 이용하여 다수의 Project에서 참조하여 사용할 수 있으므로, 하나의 System의 각 기능을 작은 단위로 Component화할 수 있으므로 코드의 재사용성을 증가 시킨다.

VC

C#

-   기존 Control Class를 상속, Subclassing의 방법으로 제작 -> Control 사용시 연결된 Control 변수를 신규 Class Type으로 변경

-   MFC ActiveX Control이 아닌 이상, 다수의 Control을 포함하는 Form 형태의 Custom Control을 제작할 수 없음

-   ActiveX Control로 제작

-   기존 Control Class를 상속하여 제작 -> 신규작성된 Control은 도구상자에 표시되어 다른 Control과 같은 방법으로 사용

-   다수의 Control이 조합된 형태의 Form을 디자인하여 Control로 제작 -> 도구상자에 사용자정의 컨트롤에 표시되어 다른 Control과 같은 방법으로 사용

-   상속된 Class에 의한 Control은 디자인타임을 지원하지 않음 (표시되는 형태, 속성 등을 지정할 수 없음)

-   Custom Control은 디자인 타임을 지원하며, 속성을 속성 창에서 즉시 편집 가능

-   ActiveX Control의 속성 지원을 위해서는 별도의 복잡한 Coding 과정을 거쳐야 함

-   일반적인 Class Property 와 동일한 방법으로 개발 -> 속성창 자동 지원

-   기존 Control을 상속한 Class VC 끼리만 호환

-   ActiveX Control은 모든 윈도우 개발 도구에서 사용가능

-   .NET Framework 지원 도구에서만 사용가능

 


 

2. Making User Control

Form을 기반으로 하는 User Control은 일반 Form을 제작하는 과정과 동일하다. 단지, 항목 추가시 사용자정의컨트롤을 추가하면 된다. 이는 Project 내에서 추가할 수도 있고, 별도의 Project에서 추가하여 DLL로 제작할 수도 있다.

 

User Control 제작과정

1. 사용자정의컨트롤 항목을 추가한다. 추가하면 빈 Form이 표시된다.

 

 

2. Form을 원하는 형태로 Design하고 Code를 추가한다.

   아래는 시///리를 표시하는 ComboBox Design한 것이다.

 

 

내부적인 처리는 일반 Form에서의 작업과 동일하므로 Form에서와 같이 Coding 한다.

 

3. 위 과정을 거치면 도구상자의 내 사용자 정의 컨트롤에 제작한 User Control이 표시된다.

   따라서 원하는 Form에서 다른 Control과 같은 방법으로 사용한다.

 

 

3. Making Custom Control

기존의 Class를 기반으로 하는 Custom Control은 아래와 같은 방법을 따른다. 이는 Project 내에서 추가할 수도 있고, 별도의 Project에서 추가하여 DLL로 제작할 수도 있다. 여기에서는 DLL로 제작하는 방법을 설명한다.

 

User Control 제작과정

1. 새 프로젝트에서 Windows 컨트롤 라이브러리를 선택하여 Project를 생성한다.

 

 

프로젝트를 생성하면 아래와 같은 빈 디자인 창이 생성된다.

 

 

2. Control을 수정하거나 새로운 사용자 정의 컨트롤을 추가한다.

 

 

3. 상속 받기를 원하는 Class Super Class를 변경한다.

   여기에서는 Panel을 상속받기로 한다.

기존 Code

public class PanelX : System.Windows.Forms.UserControl

{

변경후

public class PanelX : System.Windows.Forms.Panel

{

 

위 과정을 거치면 초기에 표시된 Form이 아래와 같이 변경된다.

 

 

이상태에서는 더 이상 Form을 편집할 수 없다.


 

4. 원하는 Code를 추가한다. 여기서는 onPaint Override 하는 과정을 나타낸다.

protected override void onPaint(PaintEventArgs e)

{

    base.OnPaint (e);

 

    Rectangle rect = new Rectangle(0, 0, this.Width, this.Height);

    Rectangle rect2 = new Rectangle(1, 1, this.Width - 2, this.Height - 2);

 

    switch(m_BorderStyle)

    {

      case BorderStyles.FixedSingle:

       {

          ControlPaint.DrawBorder(e.Graphics, rect, m_BorderColor, ButtonBorderStyle.Solid);

          break;

       }

       case BorderStyles.Fixed3D_Raised:

       {

          ControlPaint.DrawBorder3D(e.Graphics, rect, Border3DStyle.Raised);

          break;

      }

     

      // 이하생략

   }

}

 

5. Coding이 완료하고 Compile을 하면 DLL인 만들어진다. DLL을 타 Project에서 도구상자에서 항목을 추가하면 Control로 사용할 수 있다.

 

출처 : http://rainiac.com/lecture/CS/CS_CustomControl_Part1.htm

728x90

'PROGRAMMING > C#' 카테고리의 다른 글

NameValueCollection 사용하기  (0) 2012.02.23
CS CustomControl Part2  (0) 2012.02.22
Delegate & Event  (0) 2012.02.22
Windows Message override하기  (0) 2012.02.22
문자열에서 확장자 없애기 - C#  (0) 2012.02.13

댓글