Wenn man die Mitglieder eine Enumeration auflisten möchte, z.B. um sie in einem Dialog zur Auswahl anzubieten, kann man die Funktion 'Enum_GetMember' verwenden. Sie arbeitet für VB-interne, Framework-interne und benutzer-erstellte Enumerationen beliebigen Datentyps. Die Funktion besitzt zwei Typ-Parameter (nicht zu verwechseln mit Variablen-Parametern!). Der erste Typ-Parameter ('EnumType') erwartet die Angabe der Enumeration, deren Mitglieder gelistet werden sollen. Im zweiten Parameter ('ValueType') ist anzugeben, als welcher Datentyp die in der Enumeration enthaltenen Werte zurückgegeben werden. Enumerationswerte können beliebige Ganzzahl-Typen (von Byte bis ULong) sein. Der angeforderte 'ValueType' braucht nicht dem Daten-Typ der Enumerations-Werte zu entsprechen, er muss die Werte-Spannweite aber aufnehmen können (Erweiterungs-Konvertierung). Die Funktion füllt eine 'Dictionary', die die numerischen Werte ('TKey') und die zugehörigen String-Kennungen ('TValue') der Enumeration enthält. Der 'TKey'-Typparameter der 'Dictionary' muss dem 'ValueType'-Parameter der Funktion 'Enum_GetMember' entsprechen. Falls die Routine scheitert (z.B. unbrauchbarer 'EnumType', numerischer Überlauf des 'ValueType'), wird 'Nothing' zurückgegeben. (Die 'Constraint' der Typparameter ['Structure'] ist nicht hinreichend einschränkend. Der Programmierer muss deshalb selbst darauf achten, im ersten Parameter eine Enumeration und im zweiten einen geeigneten Ganzzahl-'Primitive' anzugeben.) Das klingt alles vielleicht ein wenig verwirrend, ist aber in der Anwendung einfach. Der Namespace 'System' muss importiert werden. Alles weitere ist im Code qualifiziert. ''' <summary>Enumerations-Member auflisten</summary> ''' <typeparam name="EnumType">Enumeration (Typ)</typeparam> ''' <typeparam name="ValueType"> ''' Datentyp der numerischen Enumerations-Werte</typeparam> ''' <returns>Dictionary mit den Enumerations-Werten (Typ wählbar) ''' und den Bezeichnern/Namen (Typ: String)</returns> Public Function Enum_GetMembers ( _ Of EnumType As Structure, ValueType As Structure)() _ As Collections.Generic.Dictionary(Of ValueType, String) Try ' Alle Werte der Enumeration abfragen Dim values As EnumType() = _ CType(Convert.ChangeType _ (Enum.GetValues(GetType(EnumType)), _ GetType(EnumType())), EnumType()) If values.Length < 1 Then Return Nothing Dim val_str As String, val_out As ValueType ' Rückgabe-Dictionary erstellen Dim dic As New Collections.Generic.Dictionary(Of ValueType, String) ' Enumerations-Werte durchlaufen For Each Value As EnumType In values ' den aktuellen Enumerations-Wert ' in den geforderten 'ValueType' wandeln val_out = CType(Convert.ChangeType(Value, GetType(ValueType)), ValueType) ' Kennzeichner/Namen zum Enumerations-Wert abfragen val_str = Enum.GetName(GetType(EnumType), Value) ' ... und Wert + Namen in der Dictionary anhängen dic.Add(val_out, val_str) Next Value Return dic Catch Return Nothing End Try End Function Anwendungsbeispiele: Private Enum enm_prog As Byte a = 0 b = 127 c = 255 End Enum ' Deklaration der Dictionary Dim dic As Collections.Generic.Dictionary(Of Long, String) ' eine Framework-Enumeration dic = Enum_GetMembers(Of Globalization.NumberStyles, Long)() ' eine VB-Enumeration dic = Enum_GetMembers(Of Microsoft.VisualBasic.FirstDayOfWeek, Long)() ' eine programmierte Enumeration (siehe oben) dic = Enum_GetMembers(Of enm_prog, Long)() ' Ausgabe des Dictionary-Inhaltes im Output-Fenster For Each kvp As Collections.Generic. _ KeyValuePair(Of Long, String) In dic Console.Write("Name = " & kvp.Value & _ " Wert = " & CStr(kvp.Key) & Microsoft.VisualBasic.vbCrLf) Next kvp Dieser Tipp wurde bereits 11.727 mal aufgerufen.
Anzeige
![]() ![]() ![]() Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
sevWizard für VB5/6 ![]() Professionelle Assistenten im Handumdrehen Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Tipp des Monats ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. vb@rchiv CD Vol.6 ![]() ![]() Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |