読み取り専用PropertyGridの
-
22-09-2019 - |
質問
私は、ユーザーが時々私のオブジェクトの編集インスタンスを表示してできるようにするために書いていたアプリケーションにPropertyGridのを使用しています。時には、ユーザーは、プロパティグリッドをファイルに変更を加えることができ、読み取り/書き込みモードで開いたファイルであってもよいです。他の例では、それらは、読み取り専用モードで開いているファイルを有していてもよく、およびPropetyGridを通じてオブジェクトに変更を加えることはできないはずです。私のクラスもICustomTypeDescriptorを実装することによって返される動的な性質を持っています。私は本当にPropertyGridコントロールの柔軟性に建てられています。
を利用したい理由であります読み取り専用モードにプロパティグリッドを設定する簡単な方法はないようです。私は、PropertyGridのを無効にした場合、これはまた、リストをスクロールからユーザーを防ぐことができます。だから私はこれを行うための最善の方法は、実行時にプロパティにReadOnlyAttributesを追加することであると思っています。他のいくつかの方法はありますか?
解決
ICustomTypeDescriptor
を実装しているので、任意の属性を追加する必要はありません。あなただけIsReadOnly
にPropertyDescriptor
を上書きすることができます。私は常に(ICustomTypeDescriptor
とTypeConverter
経由)を模倣包まれたタイプが、読み取り専用PropertyDesciptor
インスタンスを返すことの仲介種類を書くことはかなり簡単であるべきと思っていますか?私は知ってみましょうあなたが例をしたい場合(これはしかし、のの些細なことではない)。
また、何かそれを建て、このの申し出などがある。
かどうかを確認したい場合があります他のヒント
私はグレーアウトされているPropertyGridのを気にしないthosesのための非常に迅速な解決策を発見した。
TypeDescriptor.AddAttributes(myObject, new Attribute[]{new ReadOnlyAttribute(true)});
propertyGrid1.SelectedObject = myObject;
私のアドバイスは、(読み取り専用)、次に<アクションをキャンセルした場合、PropertyGridのコントロールから、そのカスタムコントロールの継承は、読み取り専用のブール値を持っていることをカスタムコントロールを作成し、その後、いくつかのものとチェックを無効にすることです/ P>
私はこの1つに走りました。私だけではなく、グレー表示読み込まれた制御を望んでいました。
継承プロパティグリッドコントロールからと
キーの押下を無効にするために、次のコードを追加することにより、唯一のバージョン独自の読み取りを作成#Region "Non-greyed read only support"
Private isReadOnly As Boolean
Public Property [ReadOnly]() As Boolean
Get
Return Me.isReadOnly
End Get
Set(ByVal value As Boolean)
Me.isReadOnly = value
End Set
End Property
Protected Overrides Function ProcessDialogKey(ByVal keyData As Keys) As Boolean
If Me.isReadOnly Then Return True
Return MyBase.ProcessDialogKey(keyData)
End Function
Public Function PreFilterMessage(ByRef m As Message) As Boolean
If m.Msg = &H204 Then 'WM_RBUTTONDOWN
If Me.isReadOnly Then Return True
End If
Return False
End Function
#End Region