2016-11-21 5 views
0

datagridviewpropertygrid이있는 작은 응용 프로그램을 만들고 있습니다.중복 값을 숨기는 propertygrid와 DataGridview 결합

주 응용 프로그램에는 기본 클래스 인 classderived classes이 있습니다.

그래서 예를 들어 MainClassDerivedClass

datagridviewBindingList(Of MainClass) 사용자가 셀을 선택하거나 행 때 propertygird 내가 수있는 DerivedClassproperties

표시되어야에 바인딩 호출 할 이 작업을 수행 할 수 있지만 MainClass에는 DerivedClass에서 사용할 수있는 속성이 있으므로 중복 값이 ​​있습니다. 즉, DerivedClass에서만 사용할 수있는 속성

어떻게하면됩니까? 이 솔루션은 (내가 경험있는 프로그래머가 아닙니다 ..)

post 수 있지만 슬프게도 # c를 저를 위해 총 횡설수설입니다 수 사용하는 것이 작업을 수행하는

Public Class MainClass 

    Public Property ComponentType As BodyComponentTypeEnum 
    Public Enum BodyComponentTypeEnum 
     Cylinder 
    End Enum 

    Public Property Height As Double 
    Public Property Thickness As Double 
    Public Property Material As String 
    Public Property Diameter As Double 
    Public Property Mass As Double 
End Class 


Public Class DerivedClass 

    Inherits MainClass 

    Public Property Segments As Integer 
    Public Property WeldOrientation As Double 

End Class 

Application Capture

+0

대답이 이미있는 경우 먼저 변환 한 다음 나중에 발생하는 문제로 다시 돌아가보십시오. –

+0

사용자 지정 특성을 만들고이 속성을 사용하여 [PropertyGrid.BrowsableAttributes] (https://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=EN-US&k=k)를 통해 표시 할 소품을 제어 할 수 있습니다. k (TargetFrameworkMoniker-.NETFramework, 버전 % 3Dv4.5.1), k (DevLang-VB) & rd = true) – Plutonix

답변

1

한 가지 방법 TypeConverter은 속성을 제공하고 일부 조건에 따라 하위 클래스 속성 만 반환합니다. 그러나 속성 표에는 BrowsableAttributes 속성이 포함되어있어 속성 및 값이 전달 된 속성 만 표시하도록 지정할 수 있습니다.

연결된 대답은 사용자 지정 특성을 사용하지만 다른 특성은 사용할 수 있습니다. 여기에는 CategoryAttribute이 사용됩니다.

Public Class Widget 
    <Category("Main")> 
    Public Property Name As String 
    <Category("Main")> 
    Public Property ItemType As String 

    Public Property Length As Double 
    ... 

Public Class SubWidget 
    Inherits Widget 

    <Category("SubWidget"), DisplayName("Weld Orientation")> 
    Public Property WeldOrientation As Double 

PropertyGridCategory가 "는 SubWidget"입니다 속성 표시 이야기, 부모의 속성을 표시에서 SubWidget 개체를 방지하기위한 방법은 다음과 같습니다

' target attribute array 
Dim attr = New Attribute() {New CategoryAttribute("SubWidget")} 
' pass collection to propgrid control 
propGrid.BrowsableAttributes = New AttributeCollection(attr) 

enter image description here

당신은 컬렉션을 통과하는 여러 개의 한정자를 가질 수 있다는 것을 의미합니다. 표시 할 속성이 모두 있어야합니다. 사용자 정의 속성을 사용하려면이 이러한 경우 체인입니다 (A SubSubWidget가 등) 경우 여러 속성을 생성하지 않는 간단한 부울 충분하지 않습니다

<AttributeUsage(AttributeTargets.Property)> 
Public Class PropertyGridBrowsableAttribute 
    Inherits Attribute 

    Public Property Browsable As Boolean 
    Public Sub New(b As Boolean) 
     Browsable = b 
    End Sub 

End Class 
... 
<Category("SubWidget"), DisplayName("Weld Orientation"), 
PropertyGridBrowsable(True)> 
Public Property WeldOrientation As Double 

을되도록 '마지막'항목 쇼에서 속성 만.