Проблема с коллекциями.
От: nbb  
Дата: 29.09.05 07:09
Оценка:
Доброе время суток всем метрам .Net.
Появилась проблема с которой не могу справиться сам .
Необходимо добавить к компоненту колекци. Написал тестовый пример
все как бы правильно но после того как в дизайнере добавил элементы
колекции и зделал билд — колекция очистилась и
элементы колекции в коде не создались. Атрибуты пропсисал,
конвертор тоже сделал, а в чом глюк не могу понять . Перерыл уже все
что можно и в МСДН посмотрел, и на данном форуме, результат отрицательный
Буду благодарен за любую подсказку. Зарание спасибо!
вот пример кода:


// Компонент
public class TMComponent : Component
    {
        public TMComponent(){}
    
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]    
        public TMCollection Parameters
        {
            get
            {
                if (FCollection == null)
                    return FCollection = new TMCollection();
                else
                    return FCollection;
            }
        }

        private TMCollection FCollection;
    }

// Колекция
    public class TMCollection : CollectionBase
    {
        public TMCollection(){}

        public void Add (TMItem  value)
        {
      this.List.Add(value);
        }
        public void Remove (int index)
        {
      this.List.RemoveAt(index);
        }
        public TMItem this[int index]
        {
            get{return ((TMItem)this.List[index]);}
            set{ List[index] = value;}
        }
        public TMItem Element 
        {
            get
            {
                if (FItem == null)
                    return FItem = new TMItem();
                else return FItem;            
            }
            set{FItem = value;}
        }

        private TMItem FItem;
    }

// Элемент колекции
 [TypeConverter(typeof(TMConvert)), Serializable()] 
    public class TMItem : Component
    {
        public TMItem(){}
        public string Text
        {
            get{ return FText; }
            set{ FText = value; }
        }
        public int Size
        {
            get{ return FSize; }
            set{ FSize = value; }
        }
        
        private string FText;
        private int FSize;
    }

// Конвертор    
public class TMConvert :  TypeConverter
    {
        public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
        {
            if(destinationType == typeof(InstanceDescriptor))
            {
                return true;
            }
            return base.CanConvertTo (context, destinationType);
        }

        public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
        {
            ConstructorInfo info;
            TMItem element;
            Type[] array_type;
            object[] array_obj;
            if(destinationType == typeof(InstanceDescriptor))
            {
                array_type = new Type[2];
                array_type[0] = typeof(int);
                array_type[1] = typeof(string);

                info = typeof(TMItem).GetConstructor(array_type);
                element = (TMItem)value;

                array_obj = new object[2];
                array_obj[0] = element.Size;
                array_obj[1] = element.Text;

                return new InstanceDescriptor(info, array_obj);      
            }      
            return base.ConvertTo (context, culture, value, destinationType);
        }        
    }
Re: Проблема с коллекциями.
От: ForestLabs Россия  
Дата: 29.09.05 07:28
Оценка:
Здравствуйте, nbb, Вы писали:

nbb>Доброе время суток всем метрам .Net.

nbb>Появилась проблема с которой не могу справиться сам .
nbb>Необходимо добавить к компоненту колекци. Написал тестовый пример
nbb>все как бы правильно но после того как в дизайнере добавил элементы
nbb>колекции и зделал билд — колекция очистилась и
nbb>элементы колекции в коде не создались. Атрибуты пропсисал,
nbb>конвертор тоже сделал, а в чом глюк не могу понять . Перерыл уже все
nbb>что можно и в МСДН посмотрел, и на данном форуме, результат отрицательный
nbb>Буду благодарен за любую подсказку. Зарание спасибо!
nbb>вот пример кода:
<skipped>

Такое бывает, если тестовая форма и тестируемый компонент находятся в одной сборке.
Re[2]: Проблема с коллекциями.
От: nbb  
Дата: 29.09.05 07:52
Оценка:
Здравствуйте, ForestLabs, Вы писали:

FL>Такое бывает, если тестовая форма и тестируемый компонент находятся в одной сборке.


Спасибо вы действительно были правы
Но как с этим боротся ? В данный момент у меня в солюшене 2 проекта мой компонент и тестовый WinApp.
А теперь что, открывать 2 студии в одной компонент править а во-второй тестировать ?
Re[3]: Проблема с коллекциями.
От: ForestLabs Россия  
Дата: 29.09.05 08:02
Оценка:
Здравствуйте, nbb, Вы писали:

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


FL>>Такое бывает, если тестовая форма и тестируемый компонент находятся в одной сборке.


nbb>Спасибо вы действительно были правы

nbb>Но как с этим боротся ? В данный момент у меня в солюшене 2 проекта мой компонент и тестовый WinApp.
nbb>А теперь что, открывать 2 студии в одной компонент править а во-второй тестировать ?

Оп-па!
Я ведь посоветовал как раз то, что у Вас есть — "у меня в солюшене 2 проекта мой компонент и тестовый WinApp".
Получается, в такой среде не работает? У меня как раз проблемы были с однопроекными солюшенами.

Что тут посоветовать —
1. Выйти из Студии
2. Удалить все папки bin и obj
3. Иногда не мешает удалить файл <имя_солюшена>.suo
4. Убедится, что референс стоит на проект, а не на бинарник
5. Достать, наконец, бубен...

Успехов!

P.S. После решения проблемы прошу сообщить народу пути.
Re[4]: Проблема с коллекциями.
От: nbb  
Дата: 29.09.05 08:15
Оценка:
FL>Что тут посоветовать —
FL>1. Выйти из Студии
FL>2. Удалить все папки bin и obj
FL>3. Иногда не мешает удалить файл <имя_солюшена>.suo
FL>4. Убедится, что референс стоит на проект, а не на бинарник
FL>5. Достать, наконец, бубен...

А что вы подразумеваете од вот этим:

FL>4. Убедится, что референс стоит на проект, а не на бинарник


я делал так добавил в ToolBox свой компонент сославшись на dll,
и кинул его на форму.Меняю чтото в библиотеку, билд, смотрю на результат в WinApp
Поправте если я чото не так делаю. До этого компоненты не писал. может и намудрил.
Остальные перечисленые пункты ничего не дали Надо искать бубен
Re[5]: Проблема с коллекциями.
От: ForestLabs Россия  
Дата: 29.09.05 10:33
Оценка:
Здравствуйте, nbb, Вы писали:
nbb>А что вы подразумеваете од вот этим:

FL>>4. Убедится, что референс стоит на проект, а не на бинарник


nbb>я делал так добавил в ToolBox свой компонент сославшись на dll,

nbb>и кинул его на форму.Меняю чтото в библиотеку, билд, смотрю на результат в WinApp
nbb>Поправте если я чото не так делаю. До этого компоненты не писал. может и намудрил.
nbb>Остальные перечисленые пункты ничего не дали Надо искать бубен

Отвечаю:
— лезем в референсы WinApp и удаляем ссылку на dll, в которой компонент
— потом добавляем ссылку на проект (в диалоге 'Add Reference' есть закладка 'Projects')
Re[6]: Проблема с коллекциями.
От: nbb  
Дата: 29.09.05 12:00
Оценка:
Здравствуйте, ForestLabs, Вы писали:

FL>Отвечаю:

FL>- лезем в референсы WinApp и удаляем ссылку на dll, в которой компонент
FL>- потом добавляем ссылку на проект (в диалоге 'Add Reference' есть закладка 'Projects')

Пасибо.

Проблему решил ! Ошибка заключалась совсем не там где искал.
Неправильно был реализован ConvertTo. Для сохранения свойста Size и Text
при таком конветроре необходимо дописать еще один конструктор для класа
TMItem


public TMItem(int size, string txt)
    { 
      this.FSize = size;
      this.FText = txt;
    }


Т.к ConvertTo возращает информацию о конструкторе класов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.