Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:


PropertyGrid - Скрытие свойств родителя

Поиск:
Доброго времени суток.
К примеру вы ходите отобразить в PropertyGrid'e (PG) свойства класса Child, который наследуюется от класса Parent
Код

    class Parent
    {
        public int Age { get; set; }
        public string Name { get; set; }
    }
    class Child : Parent
    {
        public int Toys { get; set; }
    }


Но не хотите, чтобы свойства родителя были отображены. Это можно сделать след. образом. В классе Child прописать
Код

        [Browsable(false)]
        public int Toys { get; set; }
        [Browsable(false)]
        public new int Age { get; set; }


Но если вам с разл. классами это приходится делатЬ, то весьма неудобно. И второй вариант.

Код

    interface IPropertyHideParent
    {
    }
public class PGConverter : TypeConverter
    {
        public override bool GetPropertiesSupported(ITypeDescriptorContext context)
        {
            return true;
        }

        public override PropertyDescriptorCollection GetProperties(ITypeDescriptorContext context, object value, Attribute[] attributes)
        {
            // получим список всех видимых свойств
            PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(value, attributes, true);
            
            List<PropertyDescriptor> propList = new List<PropertyDescriptor>();
            for (int i = 0; i < pdc.Count; i++)
            {
                if (pdc[i].ComponentType.IsAbstract)
                    continue;
                object obj = Activator.CreateInstance(pdc[i].ComponentType);
                if (obj is IPropertyHideParent)
                    propList.Add(pdc[i]);
            }

            PropertyDescriptor[] propArr = new PropertyDescriptor[propList.Count];
            for (int i = 0; i < propList.Count; i++)
                propArr[i] = propList[i];
            return new PropertyDescriptorCollection(propArr);
        }
    }



а классы, для которых хотим скрыть род. свойства описать след. образом (на примере Child)

Код

    [TypeConverterAttribute(typeof(PGConverter))]
    class Child : Parent,IPropertyHideParent
    {
        public int Toys { get; set; }
    }



то бишь достаточно добавить атрибут и отнаследоваться от интерфейса IPropertyHideParent.

Удачного кодинга
Автор: Cyberdream






Просмотров: 6233

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную