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;} 
    } 

나는 인간 클래스를 재설정하려면

, 나는이 쓰기 : 부동산의 경우

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)는 0을 반환합니다및 pr.ResetValue(obj)은 값을 지 웁니다.

+0

사실 리셋 메소드의 값은 한 클래스에 대해서만 사용하려는 것이 아닙니다. 따라서 각 클래스에서 Reset {membername} 메서드를 추가해야합니까? – Nasay

관련 문제