Проблема с коллекциями.
От: 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);
        }        
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.