Возникла такая проблема! в propertygrid
для отображения булевской величины использую конвертор типа. И вместо true,false
он показывает Да, Нет. Все работает, но при двойном щелчке мыши возникает екзепшн.
:xz: Property value is not valid. :crash:
Details екзепшна выглядит так:
Object of type 'System.String' cannot be converted to type 'System.Boolean'.
Два дня бился но как его победить не знаю. На C# я только начинаю работать.
MSDN, Inet и другие источники не помогли.
Гуру. Подскажите как быть. Заранее спасибо.
Тут часть кода. но екзепшн возникает не в нем, а в нутрях propertygrid-a.
[c#]
class EnumToStringConverter : TypeConverter
{
protected ArrayList values;
public EnumToStringConverter()
{
values = new ArrayList();
}
public override bool GetStandardValuesSupported(ITypeDescriptorContext context)
{
return true;
}
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
{
StandardValuesCollection svc =
new StandardValuesCollection(values);
return svc;
}
public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
{
if (sourceType == typeof(string))
return true;
else
return base.CanConvertFrom(context, sourceType);
}
}
// Вот реализация конвертера.
class RusBoolConverter : EnumToStringConverter
{
public RusBoolConverter()
{
values.Add("Да");
values.Add("Нет");
}
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
{
if (value is string)
{
bool result;
string s = (string)value;
if (s == "Да") result = true;
else result = false;
return result;
}
else
return base.ConvertFrom(context, culture, value);
}
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
{
if ((value is string ) && (destinationType == typeof(string)))
{
int i = 0;
return value;
}
if ((value is bool) && (destinationType == typeof(string)))
{
bool v = (bool)value;
if (v) return values[0];
else return values[1];
}
else
return base.ConvertTo(context, culture, value, destinationType);
}
}
Структура для отображения выглядит так. Где ошибка? Или это глюк?
[TypeConverter(typeof(RusBoolConverter))]
public bool ChangeLAC
{
get
{
return VBS.ChangeLAC;
}
set
{
if (VBS.Started)
{
VBS.ShowEvent("ЗАПРЕЩЕНО ИЗМЕНЕНЕНИЕ\n\nПРИ ЗАПУЩЕННОЙ ВБС", EventType.Error);
return;
}
VBS.ChangeLAC = value;
}
}