Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Стандартные значения для TypeConverter 
V
    Опции темы
Freak_FB
Дата 28.8.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: 2
Всего: 4



Вот, продолжаю тренироваться на конвертере типов. На этот раз пытаюсь заставить работать список стандартных значений. Есть код:
Код

public class BaudRateConverter : TypeConverter
{
    private ArrayList values;

    public BaudRateConverter()
    {
        values = new ArrayList(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 });
    }

    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);
    }

    public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
    {
        if (values.GetType() == typeof(string))
        {
            int newVal = int.Parse((string)value);
            if (values.Contains(newVal))
                return newVal;
            else
                return base.ConvertFrom(context, culture, value);
        }
        return base.ConvertFrom(context, culture, value);
    }

    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        if (destinationType == typeof(string))
            return true;
        else
            return base.CanConvertTo(context, destinationType);
    }

    public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
    {
        if (destinationType == typeof(string))
            return string.Format("{0}", value);
        else
            return base.ConvertTo(context, culture, value, destinationType);
    }

    public override bool IsValid(ITypeDescriptorContext context, object value)
    {
        return true;
    }
}

Хочу, значит, чтобы свойство, которому приписан данный конвертер типов, раскрывалось как список определённых значений от 1 до 9.
Скомпилил, поцепил компонент на форму. Нажимаю на стрелку "вниз", дабы посмотреть список возможных вариантов.Получаю пустой список (хотя высотой, вроде, на мои 9 элементов): картинка в аттаче.
При этом, клацая в этом пустом поле, якобы если бы там были значения, выскакивает окошко с ошибкой следующего содержания: Property value is not valid. BaudRateConverter cannot convert from System.String.
Кто занимался подобным, подскажите, где грабли.

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  Cap.jpg 29,11 Kb


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
Freak_FB
  Дата 30.8.2007, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ктулхувед
**


Профиль
Группа: Участник
Сообщений: 296
Регистрация: 13.10.2006

Репутация: 2
Всего: 4



Проблема решена.
Оказалось, что в коде функции ConvertFrom допущена ошибка - вместо value.GetType() использовано values.GetType(), что, конечно, не ошибочно во время компиляции, но принесло много головной боли во время отладки готового компонента.

Это сообщение отредактировал(а) Freak_FB - 30.8.2007, 10:49


--------------------
user posted image
user posted image
Тонет Ктулху, все медведы горят в огне.
Я Креведко, очень страшно сегодня мне.

PM MAIL ICQ Skype GTalk Jabber   Вверх
IEZ
Дата 31.8.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 295
Регистрация: 10.2.2005
Где: Санкт-Петербург

Репутация: 1
Всего: 3



Код

public override bool GetStandardValuesExclusive(ITypeDescriptorContext context)
        {
            // false - можно вводить вручную
            // true - только выбор из списка
            return true;
        }

Если вставить это то в строке свойства юзвер не сможет писать буковки.


--------------------
"Нужно делать так, как нужно, а как не нужно, делать не нужно" (с) Винни-Пух.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0413 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.