vb.net - 重置所有组件的属性,排除的属性除外
问题描述
我制作了一个子过程,它将组件的所有属性放入一个列表中,然后重置它们的值,除了我声明为排除的那些。
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"})
.
我没有收到错误或其他东西,但它也不起作用!!!任何想法?
解决方案
您可以使用 IEnumerable -> 包含
.Where(Function(item) Not ExcludedProperties.Contains(item.Name))
快速阅读IsNot文档。它用于比较对象引用。它不会出错,因为它不应该出错,并且总是返回 True 因为你的字符串和字符串数组不一样。
推荐阅读
- caffe - CNN 不学习简单的几何图案
- java - 使用正则表达式从 json 路径中提取多个标记
- javascript - 尽管有变量键名和冒号字符,但映射嵌套 JSON
- debian - 为什么 apt-get install 将“从包中提取模板”抛出到 stderr?
- azure-devops - Azure 管道,如何使用来自其他存储库的 Dockerfile?
- fortran - 是否有一种 gfortran 方法可以自动读取给定目录中以特定方式命名的所有文件?
- java - 如何在 WebRequest 中获取客户端的远程地址
- c# - Json 反序列化字典
返回为空 - c# - Microsoft.AspNetCore.Server.Kestrel.Internal.Networking.UvException:错误 -4077 ECONNRESET 连接被对等方重置
- c# - 将格式 YY.MM 日期时间映射到 MM.YYYY 日期时间