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 13.270 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 TOP! Unser Nr. 1 Neu! sevDataGrid 3.0 Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. |
||||||||||||||||
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. |