Я попробовал вашу ситуацию в приложении Windows Forms (.NET 4), и сработало следующее.Я не уверен, почему ваш способ использования GetType(T1) Is GetType(T2)
не работает (возможно, у него другая семантика, например, он не учитывает наследование), но вы можете использовать это вместо этого:
Sub Show1()
For Each ctrl As Control In Controls
If TypeOf ctrl Is UserControl Then
ctrl.Hide()
End If
Next
UserControl11.Show()
End Sub
Обновление:
Я проверил MSDN, чтобы увидеть, почему ваш код не работает.Во-первых, оператор TypeOf .. Is
используется для проверки совместимости типа объекта с другим.Вот что написано в статье MSDN (ссылка: ключевое слово TypeOf ):
Ключевое слово TypeOf вводит предложение сравнения, которое проверяет, является ли объект производным от конкретного типа или реализует его,например, интерфейс.
Однако вы используете ключевое слово Is (очень отличающееся от того, которое используется в C # для проверки того, принадлежит ли объект какому-то определенному типу).Ключевое слово «Is» используется для проверки, ссылаются ли две ссылки на один и тот же объект.Вот что говорит MSDN (ссылка: Is ключевое слово ):
[Is] Сравнивает две переменные ссылки на объект.
Так что я был прав:вы используете оператор с другой семантикой, чем ваши намерения.Я редко пишу код VB .NET в наши дни.Хороший вопрос.