2017-02-03 9 views
2

У меня есть класс со свойствами как объектами классов. Например:Как сбросить значения по умолчанию для свойств компонента в PropertyGrid?

public Class Humans 
    { 
     public Person Human {get; set;} 

     [DefaulValue("New York")] 
     public string Sity {get; set;} 
    } 

    public struct Person 
    { 
     [DefaulValue("Name")] 
     public string Name {get; set;} 

     [DefaulValue("Surname")] 
     public string Surname {get; set;} 
    } 

Если я хочу, чтобы сбросить класс Humans, я пишу это:

PropertyDescriptorCollection props = TypeDescriptor.GetProperties(Humans); 
    foreach (PropertyDescriptor pr in props) 
    { 
     if (pr.Attributes.OfType<DefaultValueAttribute>().Any()) 
     { 
      pr.ResetValue(obj); 
     } 
    } 

В случае собственности, все происходит совершенно Sity, и свойства человеческого ничего не происходит. Итак, как сбросить значения по умолчанию этих свойств?

ответ

0

Вам не нужно проверять .Attributes. Ключ здесь pr.CanResetValue(obj). Если это возвращает true, вы можете позвонить pr.ResetValue(obj). Если он возвращает false, вы не должны пытаться. Есть несколько подходов для поддержки сброса - в том числе:

  • [DefaultValue]
  • void Reset{membername}()
  • обычая PropertyDesciptor

Я предлагаю вам попробовать добавить:

void ResetHuman() { Human = null; } 

Тогда вы должны найти что pr.CanResetValue(obj) возвращает true и pr.ResetValue(obj) очищает значение.

+0

Дело в том, что я хочу использовать значения метода сброса не только для одного класса. Следовательно, в каждом классе необходимо добавить метод Reset {membername}? – Nasay