사용자 지정 컨트롤(Windows Forms .NET)

Windows Forms를 사용하여 새 컨트롤을 개발하고 구현할 수 있습니다. 새 사용자 지정 컨트롤을 만들거나, 상속을 통해 기존 컨트롤을 수정하거나, 자체 그리기를 수행하는 사용자 지정 컨트롤을 작성할 수 있습니다. 이 문서에서는 상속할 수 있는 다양한 종류의 컨트롤 간 차이를 강조 표시하고 프로젝트에 대해 특정 형식의 컨트롤을 선택하는 방법에 관한 정보를 제공합니다.

Important

.NET 7 및 .NET 6에 관한 데스크톱 가이드 설명서는 제작 중입니다.

기본 컨트롤 클래스

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

  • 창 핸들을 노출합니다.
  • 메시지 라우팅을 관리합니다.
  • 마우스 및 키보드 이벤트 및 다른 많은 사용자 인터페이스 이벤트를 제공합니다.
  • 고급 레이아웃 기능을 제공합니다.
  • 시각적 표시와 관련된 많은 속성을 포함합니다(예: ForeColor, BackColor, HeightWidth).

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

고유한 컨트롤 만들기

사용자가 지정하여 만들 수 있는 컨트롤에는 사용자 정의 컨트롤, 확장된 컨트롤, 사용자 지정 컨트롤의 세 가지 유형이 있습니다. 다음 표는 만들어야 하는 컨트롤 유형을 결정하는 데 도움이 됩니다.

경우... 만들기...
  • 여러 Windows Forms 컨트롤의 기능을 다시 사용 가능한 단일 단위로 결합하려는 경우
사용자 정의 컨트롤System.Windows.Forms.UserControl에서 상속하여 만듭니다.
  • 필요한 기능이 대부분 기존 Windows Forms 컨트롤에 이미 있는 것과 동일한 경우
  • 사용자 지정 그래픽 사용자 인터페이스가 필요하지 않거나 기존 컨트롤에 대한 새 그래픽 사용자 인터페이스를 디자인하려는 경우
확장된 컨트롤은 특정 Windows Forms 컨트롤에서 상속하여 만듭니다.
  • 컨트롤의 사용자 지정 그래픽 표현을 제공하려는 경우
  • 표준 컨트롤을 통해 사용할 수 없는 사용자 지정 기능을 구현해야 하는 경우
사용자 지정 컨트롤System.Windows.Forms.Control에서 상속하여 만듭니다.

사용자 정의 컨트롤

사용자 정의 컨트롤은 소비자에게 단일 컨트롤로 제공되는 Windows Forms 컨트롤의 컬렉션입니다. 이러한 종류의 컨트롤은 복합 컨트롤이라고 합니다. 포함된 컨트롤은 구성 요소 컨트롤이라고 합니다.

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

예를 들어 사용자 정의 컨트롤을 빌드하여 데이터베이스의 고객 주소 데이터를 표시할 수 있습니다. 이 컨트롤에는 데이터베이스 필드를 표시하는 DataGridView 컨트롤, 데이터 소스에 대한 바인딩을 처리하는 BindingSource 및 레코드를 통해 이동하는 BindingNavigator 컨트롤이 포함됩니다. 데이터 바인딩 속성을 선택적으로 노출할 수 있으며, 애플리케이션 간에 전체 컨트롤을 패키징하고 다시 사용할 수 있습니다.

자세한 내용은 사용자 정의 컨트롤 개요를 참조하세요.

확장된 컨트롤

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

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

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

사용자 지정 컨트롤

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

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

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

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

맞춤 디자인 환경

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

DesignerAttribute를 사용하여 디자이너와 컨트롤을 연결합니다.

다음 정보는 최신 정보가 아니지만 도움이 될 수 있습니다.