Как изменить атрибут ReadOnly в реальном времени для использования с PropertyGrid - PullRequest
0 голосов
/ 11 апреля 2011

Я получил класс свойств, который отправляю на PropertyGrid . Я хочу изменить атрибут [readonly] некоторых свойств в режиме реального времени. Ниже приведен пример такого свойства в vb.net ...

<CategoryAttribute("Graph Limits"), _
      Browsable(True), _
      [ReadOnly](False), _
      BindableAttribute(False), _
      DefaultValueAttribute(100), _
      DesignOnly(False), _
      DescriptionAttribute("Maximum value")> _
Public Property Max() As Double
    Get
        Return _Max
    End Get
    Set(ByVal Value As Double)
        _Max = Value
    End Set
End Property

Ответы [ 2 ]

0 голосов
/ 13 июня 2012

Да, вы можете сделать это, используя метод, подобный следующему в вашем классе:

Private Sub SetReadOnlyProperty(ByVal propertyName As String, ByVal [readOnly] As Boolean)
    Dim descriptor As PropertyDescriptor = TypeDescriptor.GetProperties([GetType]())(propertyName)
    Dim attribute As ReadOnlyAttribute = DirectCast(descriptor.Attributes(GetType(ReadOnlyAttribute)), ReadOnlyAttribute)
    Dim fieldToChange As FieldInfo = attribute.[GetType]().GetField("isReadOnly", System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
    fieldToChange.SetValue(attribute, [readOnly])
End Sub

Примечание. Вам необходимо установить <[ReadOnly]()> или <ReadOnlyAttribute()> для каждого свойства в вашем классе на значение по умолчанию, чтобы это работало.

0 голосов
/ 11 апреля 2011

Насколько я знаю, метаданные статичны, поэтому их нельзя изменить во время выполнения.Я бы посоветовал вам создать класс-оболочку.

...