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;
            }
        }
Re: PropertyGrid & DoubleClick
От: andreich78 Россия  
Дата: 30.08.05 11:12
Оценка:
наверное, лучше тебе научиться пользоваться дебаггером...
в свойствах проекта поставь Debug Mode = Program, нажми Apply, потом Start Application = c:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.exe

когда запустишь проект откроется студия. в ней открывай какой-нибудь проект, использующий твой конвертер (можно даже тот же, который запущен) и пробуй получить ошибку.
брекпоинтов наставь, Exception`ы включи (меню Debug|Exceptions...)

успехов.
Re[2]: PropertyGrid & DoubleClick
От: RvS_vs Россия  
Дата: 30.08.05 11:42
Оценка:
Здравствуйте, andreich78, Вы писали:

A>наверное, лучше тебе научиться пользоваться дебаггером...


Этим я пользоваться умею.
Тут дело в другом. Конвертер типов работает правильно. Екзепшны возникают только после двойного щелчка мышой по элементу GridItem. По идее двойной щелчек переключает на следующий элемент списка. (В данном случае Да Нет). Вот в этот момент как раз и глючит. В конвертере не работает Метод ConvertFrom. Оттуда и ошибка.
Вопрос в том, чтобы заставить PropertyGrid не "Забывать" вызывать обратную конверсию типа для записи в свойство.
ЗЫ Екзепшны не ловятся дебагером. Возникают в самом propertygrid.
Может это как нить лечится.
Если нет, то как запретить doubleclick для PropertyGrid?
Спасибо!
Надеюсь.
Re[3]: PropertyGrid & DoubleClick
От: RvS_vs Россия  
Дата: 31.08.05 13:53
Оценка:
Здравствуйте, RvS_vs, Вы писали:

RS_>Здравствуйте, andreich78, Вы писали:


A>>наверное, лучше тебе научиться пользоваться дебаггером...


RS_>Этим я пользоваться умею.

Решил проблему.
Решение, кому надо, можно найти здесь
Автор: min7
Дата: 20.07.05
Re[3]: PropertyGrid & DoubleClick
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.09.05 08:40
Оценка:
Здравствуйте, RvS_vs, Вы писали:

using System;
using System.ComponentModel;
using System.Globalization;

using Rsdn.PropGridCust;

namespace Rsdn.Janus
{
    /// <summary>
    /// TypeConverter для bool
    /// </summary>
    internal class BooleanTypeConverter : BooleanConverter
    {
        public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture,
            object value, Type destType)
        {
            return (bool)value ? 
                SR.BooleanTrue : SR.BooleanFalse;
        }

        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture,
            object value)
        {
            return (string)value == SR.BooleanTrue;
        }
    }
}
... << RSDN@Home 1.2.0 alpha rev. 611 on Windows XP 5.1.2600.131072>>
AVK Blog
PropertyGrid &amp; DoubleClick
От: Аноним  
Дата: 10.09.05 14:19
Оценка:
слушай сам не гуру, тоже потрахался с этой х.ней, ответ смотри здесь
http://www.bobpowell.net/yesno.htm
я код скопировал, проверил, все работает.
удачи


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[3]: PropertyGrid & DoubleClick
От: andreich78 Россия  
Дата: 12.09.05 09:14
Оценка:
Здравствуйте, RvS_vs, Вы писали:

RS_>Здравствуйте, andreich78, Вы писали:


A>>наверное, лучше тебе научиться пользоваться дебаггером...



RS_>ЗЫ Екзепшны не ловятся дебагером. Возникают в самом propertygrid.

ловятся, ловятся, я тебе про это и намекал.
Debug|Exceptions...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.