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.456 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. |
vb@rchiv CD Vol.6 Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! Online-Update-Funktion Entwickler-Vollversionen u.v.m. Tipp des Monats September 2024 Dieter Otter Übergabeparameter: String oder Array? Mit der IsArray-Funktion lässt sich prüfen, ob es sich bei einem Übergabeparameter an eine Prozedur um ein Array oder einer "einfachen" Variable handelt. Neu! sevDTA 3.0 Pro SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. |
||||||||||||||||
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. |