Сбросить все свойства компонента, кроме исключенных - PullRequest
0 голосов
/ 29 мая 2018

У меня есть подпроцедура , которая получает все свойства компонента в список, а затем сбрасывается их значения, за исключением тех, которые я объявляю исключенными.

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).Поскольку <> не определено для типа String().

И я использую его так: Call ResetPropertiesByComponent(Me, {"ClientSize", "MinimumSize"}).

Я не получаю ошибок или что-то в этом роде, но это тоже не работает!!!Есть идеи?

1 Ответ

0 голосов
/ 29 мая 2018

Вы можете использовать IEnumerable -> Contains

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

Быстро прочитать документацию IsNot .Это для сравнения ссылок на объекты.Это не будет ошибкой, потому что это не предполагается, и всегда возвращает True, потому что ваша строка и массив строк не будут одинаковыми.

...