Control Type Recommendations
The .NET Framework gives you power to develop and implement new controls. In addition to the familiar user control, you will now find that you are able to write custom controls that perform their own painting, and are even able to extend the functionality of existing controls through inheritance. Deciding which type of control to create can be confusing. This section highlights the differences between the various types of controls from which you can inherit, and gives considerations regarding the type to choose for your project.
If you want to author a control to use on Web Forms, see Developing Custom ASP.NET Server Controls.
You can derive an inherited control from any existing Windows Forms control. This approach allows you to retain all of the inherent functionality of a Windows Forms control, and to then extend that functionality by adding custom properties, methods, or other functionality. For example, you might create a control derived from TextBox that can accept only numbers and automatically converts input into a value. Such a control might contain validation code that was called whenever the text in the text box changed, and could have an additional property, Value. In some controls, you can also add a custom appearance to the graphical interface of your control by overriding the OnPaint method of the base class.
Inherit from a Windows Forms control if:
Most of the functionality you need is already identical to an existing Windows Forms control.
You do not need a custom graphical interface, or you want to design a new graphical front end for an existing control.
A user control is a collection of Windows Forms controls encapsulated into a common container. The container holds all of the inherent functionality associated with each of the Windows Forms controls and allows you to selectively expose and bind their properties. An example of a user control might be a control built to display customer address data from a database. This control would include several textboxes to display each field, and button controls to navigate through the records. Data-binding properties could be selectively exposed, and the entire control could be packaged and reused from application to application.
Inherit from the UserControl class if:
You want to combine the functionality of several Windows Forms controls into a single reusable unit.
Another way to create a control is to create one substantially from scratch by inheriting from Control. The Control class provides all of the basic functionality required by controls (for example, events), but no control-specific functionality or graphical interface. Creating a control by inheriting from the Control class requires a lot more thought and effort than inheriting from user control or an existing Windows Forms control. The author must write code for the OnPaint event of the control, as well as any functionality specific code that is needed. Greater flexibility is allowed, however, and you can custom tailor a control to suit your exact needs. An example of a custom control is a clock control that duplicates the look and action of an analog clock. Custom painting would be invoked to cause the hands of the clock to move in response to Tick events from an internal timer component.
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.