gpt4 book ai didi

.net - 在 PropertyGrid 中设置 ReadOnly 属性将所有属性设置为只读

转载 作者:行者123 更新时间:2023-12-02 05:40:51 25 4
gpt4 key购买 nike

我正在使用 PropertyGrid 控件来编辑我的类属性,并且我正在尝试根据其他属性设置将某些属性设置为只读。

这是我类(class)的代码:

Imports System.ComponentModel
Imports System.Reflection

Public Class PropertyClass

Private _someProperty As Boolean = False

<DefaultValue(False)>
Public Property SomeProperty As Boolean
Get
Return _someProperty
End Get
Set(value As Boolean)
_someProperty = value
If value Then
SetReadOnlyProperty("SerialPortNum", True)
SetReadOnlyProperty("IPAddress", False)
Else
SetReadOnlyProperty("SerialPortNum", False)
SetReadOnlyProperty("IPAddress", True)
End If
End Set
End Property

Public Property IPAddress As String = "0.0.0.0"

Public Property SerialPortNum As Integer = 0

Private Sub SetReadOnlyProperty(ByVal propertyName As String, ByVal readOnlyValue As Boolean)
Dim descriptor As PropertyDescriptor = TypeDescriptor.GetProperties(Me.GetType)(propertyName)
Dim attrib As ReadOnlyAttribute = CType(descriptor.Attributes(GetType(ReadOnlyAttribute)), ReadOnlyAttribute)
Dim isReadOnly As FieldInfo = attrib.GetType.GetField("isReadOnly", (BindingFlags.NonPublic Or BindingFlags.Instance))
isReadOnly.SetValue(attrib, readOnlyValue)
End Sub
End Class

这是我用来编辑值的代码:

    Dim c As New PropertyClass
PropertyGrid1.SelectedObject = c

问题是,当我将 SomeProperty 设置为 True 时,没有任何反应,然后当我再次将其设置为 False 时,它设置了 所有 属性只读。有人可以看到我的代码中的错误吗?

最佳答案

尝试用 ReadOnly 属性装饰所有类属性:

<[ReadOnly](False)> _
Public Property SomeProperty As Boolean
Get
Return _someProperty
End Get
Set(value As Boolean)
_someProperty = value
If value Then
SetReadOnlyProperty("SerialPortNum", True)
SetReadOnlyProperty("IPAddress", False)
Else
SetReadOnlyProperty("SerialPortNum", False)
SetReadOnlyProperty("IPAddress", True)
End If
End Set
End Property

<[ReadOnly](False)> _
Public Property IPAddress As String = "0.0.0.0"

<[ReadOnly](False)> _
Public Property SerialPortNum As Integer = 0

从这个代码项目中找到它:Enabling/disabling properties at runtime in the PropertyGrid

In order for all this to work properly, it is important to statically define the ReadOnly attribute of every property of the class to whatever value you want. If not, changing the attribute at runtime that way will wrongly modify the attributes of every property of the class.

关于.net - 在 PropertyGrid 中设置 ReadOnly 属性将所有属性设置为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10992719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com