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
Stephen Muecke wrote:
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
"Sampson" <no*****@none.com> wrote in message
news:c2**********@daisy.noc.ucla.edu...
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.