重置除排除组件以外的所有组件属性

时间:2018-05-29 11:05:39

标签: vb.net winforms linq typedescriptor

我已经子程序 >到列表中然后 重置他们的值,除了我声明被排除的那些。

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")

我的问题是当我尝试将其排除多个属性时。我改变了我的Sub程序:

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 StringExcludedProperties As String()

Where(Function(item) item.Name <> ExcludedProperties)Where(Function(item) item.Name IsNot ExcludedProperties)。由于未为类型<>定义String()

我这样使用它:Call ResetPropertiesByComponent(Me, {"ClientSize", "MinimumSize"})

我没有错误或其他什么,但它也不起作用!有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以使用IEnumerable - &gt;包含

.Where(Function(item) Not ExcludedProperties.Contains(item.Name))

快速阅读IsNot文档。它用于比较对象引用。它不会出错,因为它不应该,并且总是返回True,因为你的字符串和字符串数组不会相同。