Вы можете сгруппировать элементы управления в один массив и выполнить итерацию этой временной коллекции, чтобы установить свойства для всех элементов управления, на которые ссылаются.Вы можете вызывать эти элементы управления по имени, даже если они не являются прямыми дочерними элементами родительской формы (в данном случае они являются дочерними элементами другого контейнера, TabPage для TabControl).
Обратите внимание, что вы используете Function
, который не возвращает значение, что делает его Sub
.
A static
(Shared
) метод не подходит для ссылки на экземпляры элементов управления.
Смотрите также, должен ли этот метод быть Public
.Вероятно, нет.
Давайте сделаем это internal
(Friend
) и посмотрим, все ли в порядке.
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
ToggleSwitchProperties()
End Sub
Friend Sub ToggleSwitchProperties()
For Each tSwitch As ToggleSwitch In {ToggleSwitch1, ToggleSwitch2, ToggleSwitch3, ToggleSwitch4, ToggleSwitch5}
tSwitch.OnText = "ON"
tSwitch.OnFont = New Font(Form1.Font.FontFamily, 8, FontStyle.Bold)
tSwitch.OnForeColor = Color.White
tSwitch.OffText = "OFF"
'(... all other settings ...)
Next
End Function
Вариант 2.
Вы также можете использовать рекурсивный метод, который ищет и задает свойства всех элементов управления определенного типа, которые находятся внутри контейнера или любого его элемента.-containers (в данном случае TabPage
внутри TabControl
).
В этом случае вам не нужно указывать все имена затронутых элементов управления: метод модифицирует все элементы управления, найденные внутриуказанный контейнер.
В вашем случае вы можете вызвать этот метод, используя TabControl
, который содержит ваш ToggleSwitch
элемент управления в качестве аргумента:
EDIT :
В коде отсутствует приведение: Dim tSwitch = DirectCast(ctl, ToggleSwitch)
, что не позволяет коду работать должным образом.Теперь добавил обратно.
ToggleSwitchProperties(TabControl1)
Friend Sub ToggleSwitchProperties(ctlParent As Control)
If (ctlParent Is Nothing) OrElse (Not ctlParent.HasChildren) Then Return
For Each ctl As Control In ctlParent.Controls.OfType(Of Control)
If TypeOf ctl Is ToggleSwitch Then
Dim tSwitch = DirectCast(ctl, ToggleSwitch)
tSwitch.OnText = "ON"
tSwitch.OnFont = New Font(Form1.Font.FontFamily, 8, FontStyle.Bold)
'(... all other settings ...)
Else
If ctl.HasChildren Then
ToggleSwitchProperties(ctl)
End If
End If
Next
End Sub