Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Свойства типа колекци?  (Прочитано 11176 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« : 01-06-2012 10:57 » 

Доброе время суток!
Проблема следующая:
Хочу реализовать свойство для контрола, для десенджера форм (грубо говоря, функционал только внешний.).
Свойство должно иметь структуру типа свойсва Size, или Font. Я не могу понять на основе чего были сделаны эти
свойства Жаль. пытался свойство типа коллекции List<T> типа своего класса делать, но это не то.

В общем как я заметил, свойство Size содержит в себе свойства Width, Height и методы... Причем ко всему этому можно спокойно получать
доступ из десенджера форм... Вопрос: какой же тип свойства используется?

* Снимок.PNG (3.07 Кб - загружено 1388 раз.)
« Последнее редактирование: 01-06-2012 13:31 от Джон » Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 01-06-2012 11:52 » 

MasterMan342, это C#? Надо думать, Size - на основе одноимённой структуры http://msdn.microsoft.com/en-us/library/system.windows.size.aspx
Font - тоже структура или класс, надо полагать.
Записан
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 01-06-2012 12:05 » 

MasterMan342, это C#? Надо думать, Size - на основе одноимённой структуры http://msdn.microsoft.com/en-us/library/system.windows.size.aspx
Font - тоже структура или класс, надо полагать.

Да) я не спорю что Font и Size это класс и (или) структура, но как эти свойства основанные на структурах с десенджером контактируют? всмысле как в десенджере можно просматривать их члены? (я пробовал изначально свою структуру делать, содержащую типы и методы, и использовать это в качестве типа для свойства... но в десенджере глухо как в танке...)

Может есть какие-нибудь волшебные атрибуты, позволяющие открывать доступ к внутренним членам элемента свойства для десенджера?
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 01-06-2012 12:11 » 

MasterMan342, http://stackoverflow.com/questions/3998615/how-to-show-a-forms-custom-property-at-design-time - это не оно?
Записан
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 01-06-2012 12:19 » 


Нет) это не совсем то что мне нужно))) атрибуты [Browsable(bool)] и [EditorBrowsable] отвечают за показ свойсва в десенджере и редакторе свойств, но не то что нужно) мне нужно определить как они будут показывать, а не будут ли показывать вообще Улыбаюсь
Записан
Вад
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 01-06-2012 12:24 » 

MasterMan342, а, не понял вопроса, значит. Я просто в C# по визуальной части не очень в теме - может, кто ещё подтянется Улыбаюсь
Записан
гайка
Гость
« Ответ #6 : 01-06-2012 14:20 » 

в окне свойств, вроде бы, отображаются свойства, унаследованные у другого класса, а не свойства этого класса.
« Последнее редактирование: 01-06-2012 14:24 от Гайка » Записан
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 01-06-2012 14:37 » 

в окне свойств, вроде бы, отображаются свойства, унаследованные у другого класса, а не свойства этого класса.

Вовсе не обязательно Улыбаюсь
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 01-06-2012 14:41 » 

Что такое "десенджер" я не знаю. Сорри.

А сделать подобную штуку можно так:

Код: (C#)
        [TypeConverter(typeof(MySizeConverter))]
        public class MySize
        {
                [Description("Width.")]
                public int Width { get; set; }
                [Description("Height.")]
                public int Height { get; set; }

                public override string ToString()
                {
                        return string.Format("{0}, {1}", Width, Height);
                }
        }

        internal class MySizeConverter : TypeConverter
        {
                public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context,
                        object value, Attribute[] filter)
                {
                        return TypeDescriptor.GetProperties(value, filter);
                }

                public override bool GetPropertiesSupported(ITypeDescriptorContext context)
                {
                        return true;
                }
        }
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
гайка
Гость
« Ответ #9 : 01-06-2012 14:44 » new

Вовсе не обязательно Улыбаюсь
ага, уже вижу
Записан
MasterMan342
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 01-06-2012 15:27 » 

Что такое "десенджер" я не знаю. Сорри.

А сделать подобную штуку можно так:

Код: (C#)
        [TypeConverter(typeof(MySizeConverter))]
        public class MySize
        {
                [Description("Width.")]
                public int Width { get; set; }
                [Description("Height.")]
                public int Height { get; set; }

                public override string ToString()
                {
                        return string.Format("{0}, {1}", Width, Height);
                }
        }

        internal class MySizeConverter : TypeConverter
        {
                public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context,
                        object value, Attribute[] filter)
                {
                        return TypeDescriptor.GetProperties(value, filter);
                }

                public override bool GetPropertiesSupported(ITypeDescriptorContext context)
                {
                        return true;
                }
        }

Интересная реализация Улыбаюсь не очень понял как атрибут TypeConverterAttribute взаимодействует со свойством... на сколько я понимаю тип на который указывает данный атрибут приобретает какие-то внутренние члены зависящие от выбранного типа, которые может использовать? (в данном случае приобретаются дескрипторы поддерживаемых контролом свойств?) я не очень понимаю как работают атрибуты Улыбаюсь  это нужно будет обдумать))) спасибо за помощь! тема закрыта!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines