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 EnumConverter
gestoß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.
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.
Wie man sieht wurde die Ausgabe des Enums Getriebe
auf die in der Methode GetStandardValues
definierte Menge begrenzt.