vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
TOP-Angebot: 17 bzw. 24 Entwickler-Vollversionen zum unschlagbaren Preis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Variablen/Strings   |   VB-Versionen: VB200827.04.09
Enumerationen: Member auflisten

Funktion, die die Werte und Bezeichner einer beliebigen Enumeration in eine Dictionary einträgt

Autor:   Manfred BohnBewertung:     [ Jetzt bewerten ]Views:  13.260 
ohne HomepageSystem:  Win2k, WinXP, Win7, Win8, Win10, Win11kein Beispielprojekt 

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:
Alle Abfragen fordern für die Enumerationswerte den DatenTyp 'Long'.
Das leere Klammerpaar im Funktionsaufruf kennzeichnet die nicht vorhandenen Variablen-Parameter der Funktion.

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.260 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel