none
Смена типа переменной через PropertyGrid RRS feed

  • Общие обсуждения

  • Есть класс настроек, в котором содержатся несколько вложенных списков.

    Первый список -  список контейнеров.

    Каждый контейнер содержит список субконтейнеров.

    Субконтейнеры могут быть разных типов. Каждый тип субконтейнеров наследует от базового класса SubContainer.

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

    Class Settings
    
    {
    
     List<Container> lc;
    
    }
    
    Class Container
    
    {
    
     List<SubContainer> lsc;
    
    }
    
    Class SubContainer
    
    {
    
     List<InnerSubContainer> lisc;
    
     int Method()
    
     {
    
     }
    
    }
    
    Class InnerSubContainer
    
    {
    
     int prop1;
    
     int prop2;
    
    }
    
    Class SubContainer1 : SubContainer
    
    {
    
     List<InnerSubContainer> lisc;
    
     int Method()
    
     {
    
     }
    
    }
    
    Class SubContainer2 : SubContainer
    
    {
    
     List<InnerSubContainer> lisc;
    
     int Method()
    
     {
    
     }
    
    }
    
    <br/>
    

    Создаем объект PropertyGrid

    И передаем ему экземпляр класса настроек.

    appPropertyGrid.SelectedObject = Config.GetClone();

     

    И собственно возникают 2 вопроса.

    1)

    Как в экземпляре SubContainer сделать свойство, при смене которого будет меняться тип экземпляра SubContainer.

    Например есть экземпляр SubContainer1, или SubContainer2.

    Он содержит свойство, например, ContainerType, при изменении которого экземпляр класса SubContainer1 станет экземпляром класса SubContainer2.

    2)

    В propertygrid это свойство должно отображаться в виде выпадающего списка возможностью выбора типа класса из всех наследующих от общего SubContainer .

    Сам список наследующих классов я получаю с помощью рефлексии.

     

    /// <summary>
    /// Получает список типов в вызывающей сборке, которые наследуют из базового типа.
    /// </summary>
    /// <param name="baseType">Базовый тип для проверки.</param>
    /// <returns>Список типов в вызывающей сборке, которые наследуют из базового типа.</returns>
    public static List<Type> GetClasses(Type baseType)
    {
      return System.Reflection.Assembly.GetCallingAssembly().GetTypes().Where(type => type.IsSubclassOf(baseType)).ToList();
    }
    

     


    42
    26 апреля 2011 г. 11:32

Все ответы

  • Не очень ясно, в чем проблема-то?

    Don't forget to vote for useful replies and/or mark answers for your questions - that helps other guys to find the answer faster.
    30 апреля 2011 г. 20:38
  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]
  • Попробую перефразировать.

    Есть PropertyGrid. В него передается для редактирования класс настроек программы.

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

    Задача - либо добавлять произвольный тип элементов (может как-то можно сделать в propertygrid отдельный редактор для данного списка)

    Либо добавлять базовый тип и потом менять его на какой либо наследующий его.

    Я технически слабо представляю как можно это реализовать через propertygrid.


    42