2016-08-24 1 views
3

NB :이 질문은 C#에서도 일반적인 질문이며 답은 C#에서이 사용법을 설명하는 것이 완벽하게 괜찮습니다.PropertyGrid.BrowsableAttributes의 관심사는 무엇입니까?

최근에 닷넷 프레임 워크에서 PropertyGrid를 살펴 보았습니다. 나는이 재산 (BrowsableAttributes)을 점검했고 나는 그것의 사용을 전혀 모른다.

처음에는 모든 BrowsableAttributeSelectedObject 번으로 돌릴 수 있다고 생각했는데 원래의 속성을 다시 찾을 수 있었을 것입니다.

하지만, 분명히이 모든 속성은

누군가는 방법의 포인트입니다 무엇을 가르치 려 수 ... 모든 True로 설정 만 BrowsableAttribute 포함 당신에게 AttributeCollection을주고 있습니까? 난

Dim attributes = MyPropertyGrid.BrowsableAttributes 
For Each A As Attribute In attributes 
    Dim Browsable As BrowsableAttribute = CType(A, BrowsableAttribute) 
    'Then how can I use this ? it's only property is Browsable (True/False) 
Next 

내가 원래 내가 속성 그리드에 선택된 객체 모르는 문제를 해결하기 위해 노력했다 ...는 .NET 내부의 유용의 방법을 이해하지 않습니다하지만 난 원하는 객체의 데이터를 수집한다.

동적으로로드 된 DLL에서 왔기 때문에 개체의 형식이 무엇인지 알지 못합니다. 나는 그것이 내가 아는 또 하나의 파생 된 클래스라는 것을 알고 있습니다. 그러나 나중에 저장하고로드 할 수 있도록 Property Grid에서 얻은 Object의 속성을 백업하는 데 흥미 롭습니다.

속성 격자에 이미 모든 값이 포함되어 있으므로이 유형의 속성이 더 많은 코드를 작성하기위한 shorcut 일 수 있다고 생각했습니다. Property Grid가 이미 코드를 작성하는 동안 리플렉션을 사용하여 코드를 검사하고 싶지 않습니다.

+1

왜 * 사용하고 싶습니까? 당신은 어떤 문제를 해결하려고합니까? (어느 것이지?)이 속성을 사용할 수 있는지 또는 학문적 인 질문인지 "RandomClass.RandomProperty는"무엇에 유용합니까? 그리고 대답은 PropertyGrid 및 [msdn] (https://msdn.microsoft.com/en-us/library/system.componentmodel.browsableattribute (v = vs.110) .aspx)에 대한 자습서의 어딘가에 있습니다. – Sinatr

+0

@Sinatr 나는 나의 질문을 업데이트했다. 그리고 대답은 튜토리얼에 없다. 나는 그 msdn 페이지에서 이미 시간을 보냈다. –

+1

* "어떤 개체가 *"속성에서 선택되었는지 다시 알 수 있고 [XY 문제] (http://meta.stackexchange.com/q/66377/299295). ** ** 왜 이것을 알아야합니까? 뭘하니? 'PropertyGrid.SelectedObject'는 객체이며, 타입을 결정하기 위해'is' 또는'GetType()'을 사용할 수 있습니다. – Sinatr

답변

3

BrowsableAttributes 속성의 작업이 명확하게 문서화 설명 하였다 :

만 속성을 속성이 지정한 값과 일치으로 PropertyGrid가 표시 있습니다. 기본값은 BrowsableAttribute.Yes 만 포함하는 AttributeCollection 입니다.

어떻게 작동합니까?

.NET 프레임 워크 형태의 메타 데이터를 찾을 수있는 두 가지 메커니즘이 있습니다

  • 반사 API를
  • 에서 TypeDescriptor 메커니즘을

유형에 대해 반사에 의해 반환 메타 데이터는 확장하지 않고 컴파일 후 수정할 수 없습니다 TypeDescriptor에 의해 반환되는 메타 데이터는 IExtenderProvider, ITypeDescriptorFilterService 또는 ICustomTypeDescriptor을 사용하여 변경할 수 있습니다.

예를 들어 이것은 디자이너가 Modifier, Locked 또는 GenerateMember과 같은 개체의 실제 속성이 아닌 디자인 타임 속성을 추가 할 수있게하는 형식 설명 메커니즘입니다.

var properties = TypeDescriptor.GetProperties(component, attributes); 

문서의 설명 부분에 필터링 규칙을 찾을 수 있습니다 TypeDescriptor.GetProperties 방법에 의존 :

PropertyGrid

속성이 방법을 얻을 수 TypeDescriptor 메커니즘을 사용합니다. 상기 방법에서 componentPropertyGridSelectedObjectattributes이다

BrowsableAttributes 속성이며 지정된 값과 일치하는 속성으로 문서화에서만 특성 PropertyGrid 바와 같이 표시된다. 규칙에 따라 기본적으로 [Brawsable(false)]의 속성은 에 표시되지 않으므로 Browsable 속성에 Yes 값이 포함되어 있습니다.

4

PropertyGrid는 비슷한 접근 방식을 사용하여 객체의 모든 속성을 반복합니다. to this answer. 이 작업을 수행하는 동안 해당 속성과 관련된 모든 특성을 검사하고 AttributeCollection (예제 코드,이 작업 방법은 is here)과 일치하는지 확인할 수 있는지 확인합니다. 발견 할 수있는 경우 속성 표에 표시되고, 그렇지 않은 경우 표시됩니다.

블랙리스트 지원이 필요한 경우 공공 장소를 속성 표에 표시하도록 숨기거나 [Browsable(false)]으로 표시하여 그 용도를 숨길 수 있습니다. 화이트리스트 접근법이 마음에 들면, 자신 만의 속성을 정의하여 원하는 모든 속성에 적용하고 BrowsableAttribute을 자신의 속성 만 포함하는 컬렉션으로 설정할 수 있습니다.

+0

답변 해 주셔서 감사합니다. PropertyGrid가 어떻게 찾았는지 이해합니다. 문제는 ProeprtyGrid.BrowsableAttributes에 BrowsableAttributes 만 Yes로 설정되어 있기 때문에 어떻게 유용할까요? –

+0

@SuperPeanut 것들은 기본적으로 검색 할 수 있습니다; IIRC 이것은 특별한 경우로 약간 다루어집니다.하지만 당신은 ** 당신 자신의 ** 필터를 추가하여 다르게 작동하게 할 수 있습니다. –

+0

@SuperPeanut : 설명은 두 번째 단락에 있습니다. 이 속성은 속성 표에 속성을 표시 할 수 있도록 속성에 첨부해야하는 속성을 정의합니다. 어떤 속성이 그리드에 나타나야하는지에 대한 화이트리스트 접근 방식이 마음에 들면 바꿀 수 있습니다. – Oliver

관련 문제