Hallo,
dies ist meine erste Post in diesem Form ...
und der Grund dafür ist ein Problem, mit dem ich mich jetzt schon seit Tagen beschäftige und keine Lösung finde.
Meine Anwendung benutzt Enum Eigenschaften in einem Propertygrid zur Auswahl verschiedener Dinge.
Ich möchte nun zur Laufzeit diese Auswahl begrenzen, indem ich dem Anwender nur eine Untermenge aller Möglichkeiten anzeige.
Dazu habe ich einen TypeConverter erstellt, der auch sehr schön die urspüngliche Auswahlmöglichkeiten begrenzen kann.
Der Haken an der Sache ist nur, dass es zu einem Fehler kommt wenn ich einen der Punkte anwähle.
Ich wäre sehr dankbar für einen Tipp, was ich hier falsch mache. (siehe Anhang)
public enum EnumModeType
{
Hund,
Katze,
Maus,
}
[TypeConverter(typeof(MyEnumConverter))]
public EnumModeType Tier { get; set; }
class MyEnumConverter : TypeConverter
{
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
string[] names = Enum.GetNames(typeof(EnumModeType));
// Todo Hier werden die Namen gefiltert
return new StandardValuesCollection(names);
}
}
Hallo und willkommen,
du mußt auch noch jeweils die beiden (Can)ConvertFrom/To
-Methoden überschreiben, s.a. die Top-Antwort in Edit the display name of enumeration members in a PropertyGrid.
Vielen Dank für deine super schnelle Hilfe. Du hast mich gerettet, die Ka...tze ist raus 😃
Für andere Suchende vielleicht hier noch der endgültige Code des Converters.
public enum EnumModeType
{
Hund,
Katze,
Maus,
}
[TypeConverter(typeof(MyEnumConverter))]
public EnumModeType Tier { get; set; }
class MyEnumConverter : EnumConverter
{
private Type enumType;
public MyEnumConverter(Type type) : base(type)
{
enumType = type;
}
public override bool CanConvertTo(ITypeDescriptorContext context, Type destType)
{
return destType == typeof(string);
}
public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destType)
{
return value.ToString();
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type srcType)
{
return srcType == typeof(string);
}
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
{
return Enum.Parse(enumType, (string)value);
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
string[] names = Enum.GetNames(typeof(EnumModeType)).Where(x => !x.StartsWith("Ka")).ToArray();
return new StandardValuesCollection(names);
}
}