Visual Basic Concepts
As with other component types, public enumerations can be shared by all of the controls in a control component (.ocx file). Place public Enums for your component in any UserControl code module.
"Providing Named Constants for Your Component," in "General Principles of Component Design," discusses techniques for providing constants, validating constants in properties, and so forth. See that topic for general information on the subject.
There are two additional factors specific to control components:
As an example of the first factor, consider the following Enum and property:
Public Enum DINOSAUR
dnoTyrannosaur
dnoVelociraptor
dnoTriceratops
End Enum
Private mdnoFavoriteDinosaur As DINOSAUR
Public Property Get FavoriteDinosaur() As DINOSAUR
FavoriteDinosaur = mdnoFavoriteDinosaur
End Property
Public Property Let FavoriteDinosaur(ByVal NewDino _
As DINOSAUR
mdnoFavoriteDinosaur = NewDino
PropertyChanged "FavoriteDinosaur"
End Property
When you set the FavoriteDinosaur property in the Properties window, the drop down list will contain dnoTyrannosaur, dnoVelociraptor, and dnoTriceratops.
As you can see, there's a fine tradeoff here between names that will look good in the drop down, and names that will avoid collisions with names used in Enums for other components.
As a rule of thumb, don't abandon the prefix ("dno" in the example above) that groups constants in global lists. The prefix provides at least some protection from name conflicts. On the other hand, don't make your prefixes so long that they obscure the names.
Class modules in control components can have one of two values of the Instancing property, Private or PublicNotCreatable. The Instancing values that enable global objects are not available in control components, so it is not possible to simulate string constants using properties of global objects, as described in "Providing Named Constants for Your Component" in "General Principles of Component Design."