# Object Design
This class diagram shows the main relationships between the most commonly used classes:
# PropertyGrid
Class dragged onto a form to instantiate a PropertyGrid. It contains an optional toolbar, the actual grid, and an optional comments area.
# InternalGrid
Internal control handling the true two-columns grid. You never directly interact with this class. It contains a collection of Properties.
# Property
One row in the grid. You usually use an enumerator to access this. It keeps a reference on a value.
# PropertyValue
Class handling the value of the .Net property. Several internal types of values exist. These handle:
- Properties represented by PropertyDescriptor classes (found by reflection using SelectedObject(s) or AppendProperty-like methods).
- Properties simulated by a TypeConverter.
- Virtual Properties (added using AppendManagedProperty).
# PropertyLook
Handles custom painting for a Property.
# PropertyFeel
Each kind of PropertyFeel (derived class) is a singleton that handles one kind of particular inplace control.
# IInPlaceControl
Interface used by each kind of inplace control, which is above all a derived class of the WinForms Control class.
# PropertyValidatorBase
Base class used by all validator classes, i.e. classes checking a user-entered value is correct.
# PropertyEnumerator
Class that encapsulates a reference to a Property instance. An enumerator can be stored and used to navigate the collection of Properties.
- PropertyDeepEnumerator: a bidirectional enumerator, this browses all Properties, including the hidden ones, in display order.
- PropertySiblingEnumerator: a bidirectional enumerator, this browses a parent's direct children, including the hidden ones. It only browses one level.
- PropertyVisibleDeepEnumerator: as PropertyDeepEnumerator, except ignores hidden Properties.
- PropertyVisibleSiblingEnumerator: as PropertySibilingEnumerator, except ignores hidden Properties.
# CustomDrawManager
Base class used to modify the global appearance of the PropertyGrid.