質問

私は、ユーザーが時々私のオブジェクトの編集インスタンスを表示してできるようにするために書いていたアプリケーションにPropertyGridのを使用しています。時には、ユーザーは、プロパティグリッドをファイルに変更を加えることができ、読み取り/書き込みモードで開いたファイルであってもよいです。他の例では、それらは、読み取り専用モードで開いているファイルを有していてもよく、およびPropetyGridを通じてオブジェクトに変更を加えることはできないはずです。私のクラスもICustomTypeDescriptorを実装することによって返される動的な性質を持っています。私は本当にPropertyGridコントロールの柔軟性に建てられています。

を利用したい理由であります

読み取り専用モードにプロパティグリッドを設定する簡単な方法はないようです。私は、PropertyGridのを無効にした場合、これはまた、リストをスクロールからユーザーを防ぐことができます。だから私はこれを行うための最善の方法は、実行時にプロパティにReadOnlyAttributesを追加することであると思っています。他のいくつかの方法はありますか?

役に立ちましたか?

解決

あなたがICustomTypeDescriptorを実装しているので、

任意の属性を追加する必要はありません。あなただけIsReadOnlyPropertyDescriptorを上書きすることができます。私は常に(ICustomTypeDescriptorTypeConverter経由)を模倣包まれたタイプが、読み取り専用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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top