사용자 지정 컨트롤의 종류

.NET Framework를 사용하여 새 컨트롤을 개발 및 구현할 수 있습니다. 상속을 통해서 기존 컨트롤 및 친숙한 사용자 정의 컨트롤의 기능을 확장할 수 있습니다. 또한 고유한 그리기를 수행하는 사용자 지정 컨트롤을 작성할 수도 있습니다.

만들 컨트롤 종류를 결정하기 어려울 수 있습니다. 이 항목에서는 상속할 수 있는 다양한 종류의 컨트롤 간의 차이점을 강조하고 프로젝트에 대한 특정 종류의 컨트롤을 선택하는 방법에 대한 정보를 제공합니다.

참고

Web Forms에서 사용할 컨트롤 작성에 대한 자세한 내용은 사용자 지정 ASP.NET 서버 컨트롤 개발을 참조하세요.

기본 컨트롤 클래스

Control 클래스는 Windows Forms 컨트롤의 기본 클래스입니다. Windows Forms 애플리케이션에서 시각적 개체 표시에 필요한 인프라를 제공합니다.

Control 클래스는 다음 작업을 수행하여 Windows Forms 애플리케이션에서 시각적 개체 표시를 제공합니다.

  • 창 핸들을 노출합니다.

  • 메시지 라우팅을 관리합니다.

  • 마우스 및 키보드 이벤트 및 다른 많은 사용자 인터페이스 이벤트를 제공합니다.

  • 고급 레이아웃 기능을 제공합니다.

  • 시각적 표시와 관련된 많은 속성을 포함합니다(예: ForeColor, BackColor, HeightWidth).

  • Microsoft® ActiveX® 컨트롤 역할을 하는 Windows Forms 컨트롤에 필요한 보안 및 스레딩 지원을 제공합니다.

인프라의 상당 부분이 기본 클래스에서 제공되므로 비교적 쉽게 사용자 고유의 Windows Forms 컨트롤을 개발할 수 있습니다.

컨트롤의 종류

Windows Forms에서는 복합, 확장된사용자 지정으로 세 가지 종류의 사용자 정의 컨트롤을 지원합니다. 다음 섹션에서는 각 종류의 컨트롤을 설명하고 프로젝트에서 사용할 종류를 선택하기 위한 권장 사항을 제공합니다.

복합 컨트롤

복합 컨트롤은 공용 컨테이너로 캡슐화된 Windows Forms 컨트롤의 컬렉션입니다. 이러한 종류의 컨트롤은 사용자 정의 컨트롤이라고도 합니다. 포함된 컨트롤은 구성 요소 컨트롤이라고 합니다.

복합 컨트롤은 포함된 각 Windows Forms 컨트롤과 연결된 고유 기능을 모두 포함하며 해당 속성을 선택적으로 노출하고 바인딩할 수 있게 해줍니다. 또한 복합 컨트롤은 사용자의 추가 개발 작업 없이 기능을 처리하는 다량의 기본 키보드를 제공합니다.

예를 들어 데이터베이스의 고객 주소 데이터를 표시하기 위해 복합 컨트롤을 빌드할 수 있습니다. 이 컨트롤에는 데이터베이스 필드를 표시하는 DataGridView 컨트롤, 데이터 소스에 대한 바인딩을 처리하는 BindingSource 및 레코드를 통해 이동하는 BindingNavigator 컨트롤이 포함됩니다. 데이터 바인딩 속성을 선택적으로 노출할 수 있으며, 애플리케이션 간에 전체 컨트롤을 패키징하고 다시 사용할 수 있습니다. 이러한 종류의 복합 컨트롤의 예는 방법: Windows Forms 컨트롤에서 특성 적용을 참조하세요.

복합 컨트롤을 작성하려면 UserControl 클래스에서 파생합니다. UserControl 기본 클래스는 자식 컨트롤의 키보드 라우팅을 제공하고 그룹으로 작업할 수 있도록 자식 컨트롤을 사용하도록 설정합니다. 자세한 내용은 Windows Forms 복합 컨트롤 개발을 참조하세요.

권장

다음과 같은 경우 UserControl 클래스에서 상속합니다.

  • 여러 Windows Forms 컨트롤의 기능을 다시 사용 가능한 단일 단위로 결합하려는 경우

확장된 컨트롤

기존 Windows Forms 컨트롤에서 상속된 컨트롤을 파생시킬 수 있습니다. 이 접근 방식을 통해 Windows Forms 컨트롤의 고유 기능을 모두 유지한 다음 사용자 지정 속성, 메서드 또는 다른 기능을 추가하여 해당 기능을 확장할 수 있습니다. 이 옵션을 사용하여 기본 컨트롤의 그리기 논리를 재정의한 다음 모양을 변경하여 해당 사용자 인터페이스를 확장할 수 있습니다.

예를 들어 사용자가 클릭한 횟수를 추적하는 Button 컨트롤에서 파생된 컨트롤을 만들 수 있습니다.

일부 컨트롤에서는 기본 클래스의 OnPaint 메서드를 재정의하여 컨트롤의 그래픽 사용자 인터페이스에 사용자 지정 모양을 추가할 수도 있습니다. 클릭을 추적하는 확장된 단추의 경우 OnPaint 메서드를 재정의하여 OnPaint의 기본 구현을 호출한 다음, Button 컨트롤의 클라이언트 영역 중 한 모서리에 클릭 횟수를 그릴 수 있습니다.

권장

다음과 같은 경우 Windows Forms 컨트롤에서 상속합니다.

  • 필요한 기능이 대부분 기존 Windows Forms 컨트롤에 이미 있는 것과 동일한 경우

  • 사용자 지정 그래픽 사용자 인터페이스가 필요하지 않거나 기존 컨트롤에 대한 새 그래픽 사용자 인터페이스를 디자인하려는 경우

사용자 지정 컨트롤

컨트롤을 만드는 또 다른 방법은 Control에서 상속하여 처음부터 새로 만드는 것입니다. Control 클래스는 이벤트를 처리하는 마우스 및 키보드를 포함한 컨트롤에 필요한 기본 기능을 모두 제공하지만 컨트롤별 기능이나 그래픽 인터페이스는 제공하지 않습니다.

Control 클래스에서 상속하여 컨트롤을 만들려면 UserControl 또는 기존 Windows Forms 컨트롤에서 상속하는 것보다 훨씬 더 많은 고려 사항과 작업이 필요합니다. 많은 구현이 남아 있으므로 사용자의 컨트롤은 복합 또는 확장된 컨트롤보다 더 큰 유연성을 가질 수 있으며 정확한 요구에 맞게 컨트롤을 만들 수 있습니다.

사용자 지정 컨트롤을 구현하려면 컨트롤의 OnPaint 이벤트에 대한 코드 및 필요한 기능별 코드를 작성해야 합니다. WndProc 메서드를 재정의하고 Windows 메시지를 직접 처리할 수도 있습니다. 이는 컨트롤을 만드는 가장 강력한 방법이지만 이 기술을 효과적으로 사용하려면 Microsoft Win32® API에 대해 잘 알고 있어야 합니다.

사용자 지정 컨트롤의 예로 아날로그 시계의 모양과 동작을 복제하는 시계 컨트롤이 있습니다. 사용자 지정 그리기를 호출하면 시곗바늘이 내부 Timer 구성 요소의 Tick 이벤트에 대한 응답으로 움직입니다. 자세한 내용은 방법: 간단한 Windows Forms 컨트롤 개발을 참조하세요.

권장

다음과 같은 경우 Control 클래스에서 상속합니다.

  • 컨트롤의 사용자 지정 그래픽 표현을 제공하려는 경우

  • 표준 컨트롤을 통해 사용할 수 없는 사용자 지정 기능을 구현해야 하는 경우

ActiveX 컨트롤

Windows Forms 인프라는 Windows Forms 컨트롤을 호스팅하도록 최적화되어 있지만 ActiveX 컨트롤을 사용할 수도 있습니다. Visual Studio에서는 이 작업이 지원됩니다. 자세한 내용은 방법: Windows Forms에 ActiveX 컨트롤 추가를 참조하세요.

창 없는 컨트롤

Microsoft Visual Basic® 6.0 및 ActiveX 기술은 창 없는 컨트롤을 지원합니다. 창 없는 컨트롤은 Windows Forms에서 지원되지 않습니다.

사용자 지정 디자인 환경

사용자 지정 디자인 타임 환경을 구현해야 할 경우 디자이너를 직접 작성할 수 있습니다. 복합 컨트롤의 경우 ParentControlDesigner 또는 DocumentDesigner 클래스에서 사용자 지정 디자이너 클래스를 파생합니다. 확장된 컨트롤과 사용자 지정 컨트롤의 경우 ControlDesigner 클래스에서 사용자 지정 디자이너 클래스를 파생합니다.

DesignerAttribute를 사용하여 디자이너와 컨트롤을 연결합니다. 자세한 내용은 디자인 타임 지원 확장방법: 디자인 타임 기능을 활용하는 Windows Forms 컨트롤 만들기를 참조하세요.

참고 항목