Property 속성 변경
PropertyGrid Control 를 사용할때 보통
[Category("위치")]
[Description("현재 X 좌표입니다. 읽기 전용 입니다.")]
[DisplayName("X")]
[ReadOnly(true)]
public int X
{
.....
}
이런 방법으로 Property에 별도의 속성을 적용하여 PropertyGrid 에 적용되게 한다.
하다보면 각종 속성에 대해서 Dynamic 하게 속성값을 변경해야 하는 경우가 있다.
>> Browsable
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.GetType())["PropertyName"];
BrowsableAttribute attribute = (BrowsableAttribute)descriptor.Attributes[typeof(BrowsableAttribute)];
FieldInfo field = attribute.GetType().GetField("browsable", BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(attribute, true);
>> ReadOnly
PropertyDescriptor descriptor = TypeDescriptor.GetProperties(this.GetType())["PropertyName"];
ReadOnlyAttribute attribute = (ReadOnlyAttribute)descriptor.Attributes[typeof(ReadOnlyAttribute)];
FieldInfo field = attribute.GetType().GetField("isReadOnly", BindingFlags.NonPublic | BindingFlags.Instance);
field.SetValue(attribute, true);
대충 이렇게 하면 변경이 가능하며
PropertyGrid 를 사용할 때 굉장히 유용하다.