我制作了一个子过程,它将组件的所有属性放入一个列表中,然后重置它们的值,除了我声明为排除的那些。
Public Shared Sub ResetPropertiesByComponent(ByVal Component As Component, ByVal ExcludedProperties As String)
Dim PropertyCollection As List(Of PropertyDescriptor) = TypeDescriptor.GetProperties(Component).OfType(Of PropertyDescriptor).
Where(Function(item) item.Name <> ExcludedProperties).
ToList()
For Each _PropertyDescriptor As PropertyDescriptor In PropertyCollection
If _PropertyDescriptor.CanResetValue(Component) Then
If _PropertyDescriptor.GetValue(Component) IsNot Nothing Then
_PropertyDescriptor.ResetValue(_Control)
End If
End If
Next
End Sub
我像这样使用它:Call ResetPropertiesByComponent(Me, "ClientSize")
.
我的问题是当我试图让它排除多个属性时。我像这样更改了我的子程序:
Public Shared Sub ResetPropertiesByComponent(ByVal Component As Component, ByVal ExcludedProperties As String())
Dim PropertyCollection As List(Of PropertyDescriptor) = TypeDescriptor.GetProperties(Component).OfType(Of PropertyDescriptor).
Where(Function(item) item.Name IsNot ExcludedProperties).
ToList()
For Each _PropertyDescriptor As PropertyDescriptor In PropertyCollection
If _PropertyDescriptor.CanResetValue(Component) Then
If _PropertyDescriptor.GetValue(Component) IsNot Nothing Then
_PropertyDescriptor.ResetValue(_Control)
End If
End If
Next
End Sub
从ExcludedProperties As String
到ExcludedProperties As String()
。
从Where(Function(item) item.Name <> ExcludedProperties)
到Where(Function(item) item.Name IsNot ExcludedProperties)
。As<>
没有为 type 定义String()
。
我像这样使用它:Call ResetPropertiesByComponent(Me, {"ClientSize", "MinimumSize"})
.
我没有收到错误或其他东西,但它也不起作用!!!任何想法?