사용자 지정 컨트롤의 종류Varieties of Custom Controls

.NET Framework를 사용하여 새 컨트롤을 개발 및 구현할 수 있습니다.With the .NET Framework, you can develop and implement new controls. 상속을 통해서 기존 컨트롤 및 친숙한 사용자 정의 컨트롤의 기능을 확장할 수 있습니다.You can extend the functionality of the familiar user control as well as existing controls through inheritance. 또한 고유한 그리기를 수행하는 사용자 지정 컨트롤을 작성할 수도 있습니다.You can also write custom controls that perform their own painting.

만들 컨트롤 종류를 결정하기 어려울 수 있습니다.Deciding which kind of control to create can be confusing. 이 항목에서는 상속할 수 있는 다양한 종류의 컨트롤 간의 차이점을 강조하고 프로젝트에 대한 특정 종류의 컨트롤을 선택하는 방법에 대한 정보를 제공합니다.This topic highlights the differences among the various kinds of controls from which you can inherit, and provides you with information about how to choose a particular kind of control for your project.

참고

Web Forms에서 사용할 컨트롤 작성에 대한 자세한 내용은 사용자 지정 ASP.NET 서버 컨트롤 개발을 참조하세요.For information about authoring a control to use on Web Forms, see Developing Custom ASP.NET Server Controls.

기본 컨트롤 클래스Base Control Class

Control 클래스는 Windows Forms 컨트롤의 기본 클래스입니다.The Control class is the base class for Windows Forms controls. Windows Forms 애플리케이션에서 시각적 개체 표시에 필요한 인프라를 제공합니다.It provides the infrastructure required for visual display in Windows Forms applications.

클래스 Control 는 다음 작업을 수행 하 여 Windows Forms 응용 프로그램에서 시각적 표시를 제공 합니다.The Control class performs the following tasks to provide visual display in Windows Forms applications:

  • 창 핸들을 노출합니다.Exposes a window handle.

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

  • 마우스 및 키보드 이벤트 및 다른 많은 사용자 인터페이스 이벤트를 제공합니다.Provides mouse and keyboard events, and many other user interface events.

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

  • ForeColor에는 BackColor ,,Width, 등의 시각적 표시와 관련 된 많은 속성이 있습니다. HeightContains many properties specific to visual display, such as ForeColor, BackColor, Height, and Width.

  • Microsoft® ActiveX® 컨트롤 역할을 하는 Windows Forms 컨트롤에 필요한 보안 및 스레딩 지원을 제공합니다.Provides the security and threading support necessary for a Windows Forms control to act as a Microsoft® ActiveX® control.

인프라의 상당 부분이 기본 클래스에서 제공되므로 비교적 쉽게 사용자 고유의 Windows Forms 컨트롤을 개발할 수 있습니다.Because so much of the infrastructure is provided by the base class, it is relatively easy to develop your own Windows Forms controls.

컨트롤의 종류Kinds of Controls

Windows Forms에서는 복합, 확장된사용자 지정으로 세 가지 종류의 사용자 정의 컨트롤을 지원합니다.Windows Forms supports three kinds of user-defined controls: composite, extended, and custom. 다음 섹션에서는 각 종류의 컨트롤을 설명하고 프로젝트에서 사용할 종류를 선택하기 위한 권장 사항을 제공합니다.The following sections describe each kind of control and give recommendations for choosing the kind to use in your projects.

복합 컨트롤Composite Controls

복합 컨트롤은 공용 컨테이너로 캡슐화된 Windows Forms 컨트롤의 컬렉션입니다.A composite control is a collection of Windows Forms controls encapsulated in a common container. 이러한 종류의 컨트롤은 사용자 정의 컨트롤이라고도 합니다.This kind of control is sometimes called a user control. 포함된 컨트롤은 구성 요소 컨트롤이라고 합니다.The contained controls are called constituent controls.

복합 컨트롤은 포함된 각 Windows Forms 컨트롤과 연결된 고유 기능을 모두 포함하며 해당 속성을 선택적으로 노출하고 바인딩할 수 있게 해줍니다.A composite control holds all of the inherent functionality associated with each of the contained Windows Forms controls and enables you to selectively expose and bind their properties. 또한 복합 컨트롤은 사용자의 추가 개발 작업 없이 기능을 처리하는 다량의 기본 키보드를 제공합니다.A composite control also provides a great deal of default keyboard handling functionality with no extra development effort on your part.

예를 들어 데이터베이스의 고객 주소 데이터를 표시하기 위해 복합 컨트롤을 빌드할 수 있습니다.For example, a composite control could be built to display customer address data from a database. 이 컨트롤에는 데이터베이스 DataGridView 필드 BindingSource 를 표시 하는 컨트롤, BindingNavigator 데이터 소스에 대 한 바인딩을 처리 하기 위한 컨트롤 및 레코드 간을 이동 하는 컨트롤이 포함 될 수 있습니다.This control could include a DataGridView control to display the database fields, a BindingSource to handle binding to a data source, and a BindingNavigator control to move through the records. 데이터 바인딩 속성을 선택적으로 노출할 수 있으며, 애플리케이션 간에 전체 컨트롤을 패키징하고 다시 사용할 수 있습니다.You could selectively expose data binding properties, and you could package and reuse the entire control from application to application. 이러한 종류의 복합 컨트롤에 대 한 예제를 보려면 방법: Windows Forms 컨트롤에 특성을 적용 합니다.For an example of this kind of composite control, see How to: Apply Attributes in Windows Forms Controls.

복합 컨트롤을 작성 하려면 UserControl 클래스에서 파생 합니다.To author a composite control, derive from the UserControl class. 기본 UserControl 클래스는 자식 컨트롤에 대 한 키보드 라우팅을 제공 하 고 자식 컨트롤이 그룹으로 작동할 수 있도록 합니다.The UserControl base class provides keyboard routing for child controls and enables child controls to work as a group. 자세한 내용은 Windows Forms 복합 컨트롤 개발을 참조하세요.For more information, see Developing a Composite Windows Forms Control.

권장 사항Recommendation

다음과 같은 경우 UserControl 클래스에서 상속합니다.Inherit from the UserControl class if:

  • 여러 Windows Forms 컨트롤의 기능을 다시 사용 가능한 단일 단위로 결합하려는 경우You want to combine the functionality of several Windows Forms controls into a single reusable unit.

확장된 컨트롤Extended Controls

기존 Windows Forms 컨트롤에서 상속된 컨트롤을 파생시킬 수 있습니다.You can derive an inherited control from any existing Windows Forms control. 이 접근 방식을 통해 Windows Forms 컨트롤의 고유 기능을 모두 유지한 다음 사용자 지정 속성, 메서드 또는 다른 기능을 추가하여 해당 기능을 확장할 수 있습니다.With this approach, you can retain all of the inherent functionality of a Windows Forms control, and then extend that functionality by adding custom properties, methods, or other features. 이 옵션을 사용하여 기본 컨트롤의 그리기 논리를 재정의한 다음 모양을 변경하여 해당 사용자 인터페이스를 확장할 수 있습니다.With this option, you can override the base control's paint logic, and then extend its user interface by changing its appearance.

예를 들어 사용자가 클릭 한 횟수를 추적 하 Button 는 컨트롤에서 파생 된 컨트롤을 만들 수 있습니다.For example, you can create a control derived from the Button control that tracks how many times a user has clicked it.

일부 컨트롤에서는 기본 클래스의 OnPaint 메서드를 재정의 하 여 컨트롤의 그래픽 사용자 인터페이스에 사용자 지정 모양을 추가할 수도 있습니다.In some controls, you can also add a custom appearance to the graphical user interface of your control by overriding the OnPaint method of the base class. 클릭을 추적 하는 확장 된 단추의 경우 OnPaint 메서드를 재정의 하 여의 OnPaint기본 구현을 호출한 다음 Button 컨트롤의 클라이언트 영역 한쪽 모퉁이에 클릭 횟수를 그릴 수 있습니다.For an extended button that tracks clicks, you can override the OnPaint method to call the base implementation of OnPaint, and then draw the click count in one corner of the Button control's client area.

권장 사항Recommendation

다음과 같은 경우 Windows Forms 컨트롤에서 상속합니다.Inherit from a Windows Forms control if:

  • 필요한 기능이 대부분 기존 Windows Forms 컨트롤에 이미 있는 것과 동일한 경우Most of the functionality you need is already identical to an existing Windows Forms control.

  • 사용자 지정 그래픽 사용자 인터페이스가 필요하지 않거나 기존 컨트롤에 대한 새 그래픽 사용자 인터페이스를 디자인하려는 경우You do not need a custom graphical user interface, or you want to design a new graphical user interface for an existing control.

사용자 지정 컨트롤Custom Controls

컨트롤을 만드는 또 다른 방법은에서를 Control상속 하 여 처음부터 크게 만드는 것입니다.Another way to create a control is to create one substantially from the beginning by inheriting from Control. 클래스 Control 는 마우스 및 키보드 처리 이벤트를 비롯 하 여 컨트롤에 필요한 모든 기본 기능을 제공 하지만 컨트롤별 기능이 나 그래픽 인터페이스는 제공 하지 않습니다.The Control class provides all of the basic functionality required by controls, including mouse and keyboard handling events, but no control-specific functionality or graphical interface.

Control 클래스에서 상속 하 여 컨트롤을 만들려면 또는 기존 Windows Forms 컨트롤에서 UserControl 상속 하는 것 보다 훨씬 더 많은 생각과 노력이 필요 합니다.Creating a control by inheriting from the Control class requires much more thought and effort than inheriting from UserControl or an existing Windows Forms control. 많은 구현이 남아 있으므로 사용자의 컨트롤은 복합 또는 확장된 컨트롤보다 더 큰 유연성을 가질 수 있으며 정확한 요구에 맞게 컨트롤을 만들 수 있습니다.Because a great deal of implementation is left for you, your control can have greater flexibility than a composite or extended control, and you can tailor your control to suit your exact needs.

사용자 지정 컨트롤을 구현 하려면 필요한 기능별 코드 뿐만 아니라 컨트롤 OnPaint 의 이벤트에 대 한 코드를 작성 해야 합니다.To implement a custom control, you must write code for the OnPaint event of the control, as well as any feature-specific code you need. 메서드를 WndProc 재정의 하 고 windows 메시지를 직접 처리할 수도 있습니다.You can also override the WndProc method and handle windows messages directly. 이는 컨트롤을 만드는 가장 강력한 방법이지만 이 기술을 효과적으로 사용하려면 Microsoft Win32® API에 대해 잘 알고 있어야 합니다.This is the most powerful way to create a control, but to use this technique effectively, you need to be familiar with the Microsoft Win32® API.

사용자 지정 컨트롤의 예로 아날로그 시계의 모양과 동작을 복제하는 시계 컨트롤이 있습니다.An example of a custom control is a clock control that duplicates the appearance and behavior of an analog clock. 사용자 지정 그리기를 호출 하면 시계 바늘이 내부 Tick Timer 구성 요소의 이벤트에 대 한 응답으로 이동 합니다.Custom painting is invoked to cause the hands of the clock to move in response to Tick events from an internal Timer component. 자세한 내용은 방법: 간단한 Windows Forms 컨트롤을 개발 합니다.For more information, see How to: Develop a Simple Windows Forms Control.

권장 사항Recommendation

다음과 같은 경우 Control 클래스에서 상속합니다.Inherit from the Control class if:

  • 컨트롤의 사용자 지정 그래픽 표현을 제공하려는 경우You want to provide a custom graphical representation of your control.

  • 표준 컨트롤을 통해 사용할 수 없는 사용자 지정 기능을 구현해야 하는 경우You need to implement custom functionality that is not available through standard controls.

ActiveX 컨트롤ActiveX Controls

Windows Forms 인프라는 Windows Forms 컨트롤을 호스팅하도록 최적화되어 있지만 ActiveX 컨트롤을 사용할 수도 있습니다.Although the Windows Forms infrastructure has been optimized to host Windows Forms controls, you can still use ActiveX controls. Visual Studio에서는 이 작업이 지원됩니다.There is support for this task in Visual Studio. 자세한 내용은 방법: ActiveX 컨트롤을 Windows Forms에 추가 합니다.For more information, see How to: Add ActiveX Controls to Windows Forms.

창 없는 컨트롤Windowless Controls

Microsoft Visual Basic® 6.0 및 ActiveX 기술은 창 없는 컨트롤을 지원합니다.The Microsoft Visual Basic® 6.0and ActiveX technologies support windowless controls. 창 없는 컨트롤은 Windows Forms에서 지원되지 않습니다.Windowless controls are not supported in Windows Forms.

사용자 지정 디자인 환경Custom Design Experience

사용자 지정 디자인 타임 환경을 구현해야 할 경우 디자이너를 직접 작성할 수 있습니다.If you need to implement a custom design-time experience, you can author your own designer. 복합 컨트롤의 경우 ParentControlDesigner DocumentDesigner 또는 클래스에서 사용자 지정 디자이너 클래스를 파생 시킵니다.For composite controls, derive your custom designer class from the ParentControlDesigner or the DocumentDesigner classes. 확장 및 사용자 지정 컨트롤의 경우 ControlDesigner 클래스에서 사용자 지정 디자이너 클래스를 파생 시킵니다.For extended and custom controls, derive your custom designer class from the ControlDesigner class.

DesignerAttribute 사용 하 여 디자이너와 컨트롤을 연결 합니다.Use the DesignerAttribute to associate your control with your designer. 자세한 내용은 디자인 타임 지원 확장방법: 디자인 타임 기능을 활용 하는 Windows Forms 컨트롤을 만듭니다.For more information, see Extending Design-Time Support and How to: Create a Windows Forms Control That Takes Advantage of Design-Time Features.

참고자료See also