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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> свойтсва в PropertyGrid 
:(
    Опции темы
vantusiatina
Дата 21.11.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я пишу дизайнер формы.
В PropertyGrid при выделении стандартного компонента отображаются все его свойства. Как сделать так, чтобы отображались только необходимые свойства, которые я укажу для каждого добавляемого компонента?

PM MAIL   Вверх
Partizan
Дата 21.11.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



vantusiatina, для ненужных добавьте атрибут Browsable(false)


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ProgrammingLife
  Дата 21.11.2008, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.1.2008
Где: ЧИРЧИКАГО (UZ)

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



 smile  Вы уж извените...не ту тему въехал  :

Это сообщение отредактировал(а) ProgrammingLife - 24.11.2008, 18:42
PM MAIL ICQ   Вверх
vantusiatina
Дата 21.11.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Partizan, т.е. придется писать свой класс, наследующий этот Control и там прописывать эти атрибуты? Если не сложно, то можно пример?
PM MAIL   Вверх
Partizan
Дата 21.11.2008, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



vantusiatina, давно я делал что-то подобное....сейчас попробую накидать пример...
класс писать не придётся ) придётся возиться с TypeDescriptor|PropertyDescriptor и иже с ними )


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
diadiavova
Дата 21.11.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 16
Всего: 142



ProgrammingLife, ЖЖОШ


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Partizan
Дата 21.11.2008, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



vantusiatina, вот накидал:

Код

    public class MyCustomTypeDescriptor : CustomTypeDescriptor
    {
        private List<string> _shadowedProperties;
        
        private Type _shadowedType;
        
        public MyCustomTypeDescriptor(Type shadowedType, string[] shadowedProps)
        {
            this._shadowedType = shadowedType;
            this._shadowedProperties = new List<string>(shadowedProps);
        }
        private PropertyDescriptorCollection FilterProps(PropertyDescriptorCollection props)
        {
            if (props == null)
                return null;

            List<PropertyDescriptor> validProps = new List<PropertyDescriptor>();
            foreach (PropertyDescriptor pd in props)
            {
                if (!_shadowedProperties.Contains(pd.Name))
                {
                    validProps.Add(pd);
                }
            }

            return new PropertyDescriptorCollection(validProps.ToArray());
        }

        public override PropertyDescriptorCollection GetProperties()
        {
            return this.FilterProps(TypeDescriptor.GetProperties(_shadowedType));
        }

        public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
        {
            return this.FilterProps(TypeDescriptor.GetProperties(_shadowedType, attributes));
        }
    }



Код

    public class MyTypeDescriptionProvider : System.ComponentModel.TypeDescriptionProvider
    {
        public override System.ComponentModel.ICustomTypeDescriptor GetTypeDescriptor(Type objectType, object instance)
        {
            if (objectType == typeof(Button))
            {
                return new MyCustomTypeDescriptor(objectType, new string[] {"Visible", "Enabled"});
            }
            return base.GetTypeDescriptor(objectType, instance);
        }
    }


Код

...
        private void button1_Click(object sender, EventArgs e)
        {
            TypeDescriptor.AddProvider(new MyTypeDescriptionProvider(), button1);
            this.propertyGrid1.SelectedObject = this.button1;
        }
...


Идея ясна?

Это сообщение отредактировал(а) Partizan - 21.11.2008, 20:29


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vantusiatina
Дата 21.11.2008, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



да, большое спасибо.
Меня интересует ещё такой вопрос, а как при это изменить наименование свойства и описание для него?
PM MAIL   Вверх
Partizan
Дата 21.11.2008, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



vantusiatina, изменить у свойства атрибуты Description и DisplayName


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vantusiatina
Дата 22.11.2008, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



что-то я не догоняю, так они же только для чтения, можно тоже пример?
PM MAIL   Вверх
Partizan
Дата 22.11.2008, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



Аналогично классу TypeDescriptorProvider перегружается класс PropertyDescriptorProvider


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vantusiatina
Дата 23.11.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



чё-то я не нашел PropertyDescriptorProvider

в итоге конечный вариант кот. отображает только нужные свойства выглядит так

Код

public class MyCustomTypeDescriptor : CustomTypeDescriptor
    {
        private List<string> _shadowedProperties;
        
        private Type _shadowedType;
        
        public MyCustomTypeDescriptor(Type shadowedType, string[] shadowedProps)
        {
            this._shadowedType = shadowedType;
            this._shadowedProperties = new List<string>(shadowedProps);
        }
        private PropertyDescriptorCollection FilterProps(PropertyDescriptorCollection props)
        {
            if (props == null)
                return null;
            List<PropertyDescriptor> validProps = new List<PropertyDescriptor>();
            foreach (PropertyDescriptor pd in props)
            {
                if (!_shadowedProperties.Contains(pd.Name))
                {
                    validProps.Add(new MyCustomPropertyDescriptor(pd));
                }
            }
            return new PropertyDescriptorCollection(validProps.ToArray());
        }
        public override PropertyDescriptorCollection GetProperties()
        {
            return this.FilterProps(TypeDescriptor.GetProperties(_shadowedType));
        }
        public override PropertyDescriptorCollection GetProperties(Attribute[] attributes)
        {
            return this.FilterProps(TypeDescriptor.GetProperties(_shadowedType, attributes));
        }
    }


Код

public class MyCustomPropertyDescriptor : PropertyDescriptor
    {
        private PropertyDescriptor baseProp;

        public EPropertyDescriptor(PropertyDescriptor baseProp)
            : base(baseProp)
        {
            this.baseProp = baseProp;
        }

        public override string DisplayName
        {
            get
            {
                return GetNewDisplayName(base.DisplayName);
            }
        }

        public override string Category
        {
            get
            {
                return GetNewCategoryName(base.Category);
            }
        }

        public override Type ComponentType
        {
            get { return baseProp.ComponentType; }
        }

        public override bool IsReadOnly
        {
            get { return baseProp.IsReadOnly; }
        }

        public override Type PropertyType
        {
            get { return baseProp.PropertyType; }
        }

        public override void ResetValue(object component)
        {
            baseProp.ResetValue(component);
        }

        public override bool CanResetValue(object component)
        {
            return baseProp.CanResetValue(component);
        }

        public override object GetValue(object component)
        {
            return baseProp.GetValue(component);
        }

        public override void SetValue(object component, object value)
        {
            baseProp.SetValue(component, value);
        }

        public override bool ShouldSerializeValue(object component)
        {
            return baseProp.ShouldSerializeValue(component);
        }

        private string GetNewDisplayName(string displayname)
        {
            if (displayname == "Text")
            {
                return "Текст";
            }
            return base.DisplayName;
        }

        private string GetNewCategoryName (string categoryname)
        {
            if (categoryname == "Appearance")
            {
                return "Внешний вид";
            }
            return base.DisplayName;
        }
    }


большое спасибо smile 

PM MAIL   Вверх
vantusiatina
Дата 25.11.2008, 05:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



столкнулся с проблемой сокрытия и переменования вложенных свойств. Почему метод GetChildProperties() не вызывается?
PM MAIL   Вверх
Partizan
Дата 25.11.2008, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 67



vantusiatina, а в чём проблема? свойство объекта - такой же объект. С ним можно проделать всё то же самое, что и с вашив корневым объектом.


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
vantusiatina
Дата 25.11.2008, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



а можно самый простенький пример?
я пытался перегружать GetProperties и возвращать только нужную мне коллекцию и нового типа MyCustomPropertyDescriptor, только метод GetProperties не вызывается. Как ещё перехватить вызов вложенных свойств и вернуть что нужно?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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