2017-02-03 107 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;} 
    } 

如果我想重置人类类,我写这篇文章:

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

在财产的情况下,一切都发生完全增宽,并为人类的属性没有任何反应。那么以下是如何重置为这些属性的默认值?

回答

0

您不需要检查.Attributes。这里的关键是pr.CanResetValue(obj)。如果返回true,则可以拨打pr.ResetValue(obj)。如果返回false,则不应该尝试。具有支撑重置多种方法 - 包括:

  • [DefaultValue]
  • void Reset{membername}()
  • 定制PropertyDesciptor

我建议你尝试添加:

void ResetHuman() { Human = null; } 

那么你应该找到pr.CanResetValue(obj)返回truepr.ResetValue(obj)清除该值。

+0

事实是,我想使用重置方法的值不仅仅是一个类。因此,每个班级都需要添加一个方法Reset {membername}? – Nasay