Partager via


Control and UserControl

If I want to write a custom control, what's the difference between inheriting
from Control and UserControl?
How do I decide which of the two I should derive from?

Brian Pepin replies:

Main difference is not the "UserControl" part of the class, but the fact that
UserControl derives from ContainerControl.

ContainerControl has the additional logic to know how to navigate among children
using the keyboard. It has the notion of an "active" control within itself, and it
supports mnemonics and tabbing. Control doesn't do that, so if you want to compose
a control containing multiple child controls, ContainerControl must be the class to
derive from. UserControl is just a glossy layer on top of that.

The non-obvious part about this is that any container control can correctly
navigate among children, so if you put a bunch of child controls on a Control class
and slap it on a form, it will appear to work just fine. Until you place it in IE
or some other place where there is no parenting "Form" to do the keyboard navigation.
Then it will all break unless you are deriving from ContainerControl (and remember,
UserControl derives from ContainerControl).

If you put child controls on Control you are responsible for handling all keyboard
navigation yourself.

Mark
Boulter
, as usual, provides an excellent summary:

The ContainerControl (which UserControl and Form derive
from) adds behavior that Control does not have, for example, keyboard handling (mnemonic
and tabs in particular). Also UserControl adds a composition based design experience.
This is what UserControl is all about.

You use Control if you are building a control that draws its content by overriding
the paint event.

You use UserControl if you are building a control that is composed of other controls.

Comments