2016-11-21 33 views
0

私はdatagridviewpropertygridの小さなアプリケーションを開発しています。datagridviewとpropertygridを組み合わせて重複値を隠す

メインアプリケーションには、メインオブジェクトclassといくつかのderived classesがあります。例えばだから

datagridviewBindingList(Of MainClass)に結合され、ユーザがセルを選択またはpropertygirdは私ができるDerivedClassproperties

を表示すべき行ときMainClassDerivedClass

を呼び出すことができこれを行うことができますが、私の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)で表示される小道具を制御します。 (System.Windows.Forms.PropertyGrid.BrowsableAttributes); k(TargetFrameworkMoniker-.NETFramework、バージョン%3Dv4.5.1); k(DevLang-VB)&rd = true) – Plutonix

答えて

1

一つの方法は、使用することですTypeConverterは、プロパティを提供し、一部の条件に基づいて子クラスのプロパティのみを返します。しかし、プロパティーグリッドにはBrowsableAttributesプロパティーが含まれています。このプロパティーを使用すると、属性と値が渡されたプロパティーだけを表示するように指示できます。

リンクされた回答はカスタム属性を使用しますが、他の属性を使用することもできます。これはCategoryAttributeを使用します。親のプロパティを表示するからSubWidgetオブジェクトを防止するために

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 

Categoryは「サブウィジェット」であるプロパティを表示のみにPropertyGridを伝える:

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

enter image description here

あなたはどのコレクションに合格し複数の修飾子を持つことができることを意味します。表示するには、プロパティにallが必要です。カスタム属性を使用するには:「最後の」アイテムショーからのみのプロパティように、あなたは複数の属性を作成しない限りチェーンこれら(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 

を簡単なブールでは十分ではありません。

関連する問題