enumeration and how to populate them during runtime

S

Sampson

I have a question about enumeration and how to populate them during
runtime.
I am using vb.net but will happily take any advice in c# as well.
Here is an example to help illustrate what I am after.

Create a class named “clsMyItems” and in that class place an enum.
Public Enum Items
Item1 = 0
Item2 = 1
Item3 = 2
End Enum

Now from another class call the Items enum.

Dim MyItems as new clsMyItems

MyItems.Items.

After typing the last dot in “MyItems.Items.” the intellisense will show
a nice drop down list of all the enumerated items in Items. This is
exactly what I am looking for.

Now for the problem…
I don’t know ahead of time what items or how many of them will be listed
in the Items enum. This is just a simplified example of what will
eventually go into a custom control I am working on. If I can get past
this issue it will make the control insanely easy to use.

Is there a way to populate the Items enum at runtime or an equivalent
method that will give me the drop down list I so desperately need.

If it makes a difference, the control inherits from
System.ComponentModel.Component

I could do it as System.Windows.Forms.UserControl but I would prefer to
do it as a component since it will never be seen on any form.
Its primary use is for windows forms but it will be used on web forms
I’m sure.
 
S

Stephen Muecke

Sampson,

Not sure exactly what you want to do but
System.Enum.GetValues(GetType(Items)) will return an array of all the values
in Enum Items

For example, you can populate a combo box with the values of
'ProjectCategory' enumeration as follows
myCombo.DataSource = System.Enum.GetValues(GetType(ProjectCategory))

Stephen
 
S

Sampson

I'm building a custom control that when placed on a form will give me
intellisense access to the valid values for that item.

So on my form I would type something like "UserControl1.Items.(the
enumerated list would appear here)".

I don’t know what the list of items will be until a property is set on
the control so I need a way to set that enumeration up during runtime.

I have tried a reflection routine and while it appears to run, I can’t
figure out where to find the newly created enumeration...

Here’s the code I just tried.

Private Sub createPermissionEnums()
Dim currentDomain As AppDomain
Dim myAssemblyName As System.Reflection.AssemblyName
Dim myAssemblyBuilder As System.Reflection.Emit.AssemblyBuilder
Dim myModuleBuilder As System.Reflection.Emit.ModuleBuilder

' Get the current application domain for the current thread.
currentDomain = AppDomain.CurrentDomain

' Create assembly in current currentDomain
myAssemblyName = New System.Reflection.AssemblyName
myAssemblyName.Name = "TempAssembly"

' Define a dynamic assembly in the 'currentDomain'.
myAssemblyBuilder =
currentDomain.DefineDynamicAssembly(myAssemblyName,
System.Reflection.Emit.AssemblyBuilderAccess.Run)

' Define a dynamic module in "TempAssembly" assembly.
myModuleBuilder =
myAssemblyBuilder.DefineDynamicModule("TempModule")

' Define a enumeration type with name 'MyEnum' in the 'TempModule'.
Dim myEnumBuilder As System.Reflection.Emit.EnumBuilder =
myModuleBuilder.DefineEnum("MyEnum", Reflection.TypeAttributes.Public,
GetType(Integer))

' Define the named static fields in the enumeration type 'MyEnum'.
myEnumBuilder.DefineLiteral("MyEnumMember1", 2)
myEnumBuilder.DefineLiteral("MyEnumMember2", 3)
myEnumBuilder.CreateType()

End Sub
 
J

Jay B. Harlow [MVP - Outlook]

Sampson,
Enum values are known at compile time.

It sounds like you want some sort of (readonly?) Collection object,
unfortunately Collection objects do not participate in intellisense (in that
you do not get a list of values at runtime).

You will need to decide if you want an Enum (intellisense) or a Collection
(no intellisense).

Note: you can use a TypeConverter to display the dynamic list of values from
the collection in the Property window of the designers (Component or
Control) you just cannot get the list of values in the Intellisense. Post if
you need info on using a TypeCOnverter to get the dynamic list of values in
the Property window of the designers...

Hope this helps
Jay
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top