본문 바로가기

Dev::DotNet/WinForm

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 를 사용할 때 굉장히 유용하다.