.NET – Enum-Werte in PropertyGrid beschränken

Für ein Projekt stand ich gerade vor der Aufgabe die Ausgabe von Enum-Werten innerhalb eines PropertyGrids auf eine definierte Menge zu beschränken.
Nach einigem Suchen in der MSDN bin ich auf die Klasse EnumConvertergestoßen.
Wie diese Klasse benutzt wird möchte ich hier mit einem kleinen Beispiel demonstrieren.

Als erstes benötigen wir ein Enum das später dann limitiert – nämlich nur die Getriebearten für PKW – ausgegeben werden soll.

public enum Getriebe
{
    // PKW
    Manuell,
 
    // PKW
    Automatik,
 
    // Nutzfahrzeuge
    Vorschaltgetriebe,
 
    // Nutzfahrzeuge
    Nachschaltgetriebe,
 
    // Nutzfahrzeuge
    Verteilergetriebe,
 
    // Nutzfahrzeuge
    Hydraulisch,
}

Eine Klasse die das Enum benutzt sieht dann wie folgt aus.

public class PKW
{        
    public Getriebe GetriebeArt { get; set; }
}

Wird diese Klasse nun an ein PropertyGrid angebunden erhalten wir folgendes Ergebnis.

Anzeige des originalen Enums im Grid.
Das originale Enum im PropertyGrid.

Man sieht hier deutlich, dass alle Einträge des Enums direkt in die Auswahl innerhalb des PropertyGrids übernommen wurden. Dies werden wir nun mit Hilfe der oben bereits genannten EnumConverter Klasse ändern.
Dazu legen wir eine Klasse mit folgendem Inhalt an.

class GetriebeConverter : EnumConverter
{    
    #region Constructor / Dispose        
    /// <summary>
    /// Initialisiert eine neue Instanz der <see cref="GetriebeConverter"/> Klasse.
    /// </summary>
    /// <param name="type">Der Typ des Enums.</param>
    public GetriebeConverter(Type type) : base(type)
    { 
    }
    #endregion
 
    #region public methods
    /// <summary>
    /// Gibt die Standardwerte des Enums zurück.
    /// </summary>
    /// <param name="context">Der Beschreibungskontext des Typs.</param>;
    /// <returns>Liste mit Standardwerten.</returns>
    public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
    {
         return new StandardValuesCollection(new[] {
                                                       Getriebe.Automatik, 
                                                       Getriebe.Manuell
                                                   });
    }               
    #endregion
}

Die überschriebene Methode GetStandardValues übernimmt nun die ganze Arbeit. Hier wird festgelegt welche Werte zurückgeliefert werden sollen.

Damit die Klasse GetriebeConverter jetzt auch ihre Arbeit verrichten kann, muss sie noch in oben bereits gezeigte PKW Klasse eingebunden werden.

public class PKW
{        
    [TypeConverter(typeof(GetriebeConverter))]
    public Getriebe GetriebeArt{ get; set; }
}

In Zeile 3 wird der Property GetriebeArt nun mitgeteilt, dass sie für die Ausgabe der Daten die Klasse GetriebeConverter verwenden soll.

Das Ergebnis im Programm sieht dann wie folgt aus.

Das geflterte Enum im Grid.
Das gefilterte Enum im PropertyGrid.

Wie man sieht wurde die Ausgabe des Enums Getriebe auf die in der Methode GetStandardValues definierte Menge begrenzt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.