PropertyGrid & DoubleClick
От: RvS_vs Россия  
Дата: 30.08.05 09:40
Оценка:
Возникла такая проблема! в 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;
            }
        }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.