我想在启动时使用一个函数将几个属性应用于自定义控件类。
ToggleSwitch1
这是我到目前为止所拥有的。我想将这些设置应用到其他5个切换开关(命名为ToggleSwitch5
到TabPage1
),但是由于某种原因,我找不到解决方法。
有关情况的更多信息:
我创建了一个带有TabControl的窗体,并且开关位于JCS.ToggleSwitch
上。
拨动开关是定制的(来自CodeProject的 ul
)
答案 0 :(得分:0)
您可以将控件分组到一个数组中,并迭代此临时集合以设置所有引用的控件的属性。即使这些控件不是“父窗体”的直接子级(在这种情况下,它们是另一个容器的子级,也就是TabControl的TabPage),也可以按名称调用。
请注意,您使用的Function
不会返回值,而是将其设为Sub
。
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。
您还可以使用递归方法来搜索和设置特定类型的所有控件的属性,这些控件位于容器或其任何子容器(TabPage
中的TabControl
这种情况)。
在这种情况下,您无需指定所有受影响的控件的名称:该方法将修改在指定容器内找到的所有控件。
在您的情况下,可以使用 TabControl
作为参数的 ToggleSwitch
调用此方法:
编辑:
该代码缺少强制转换: 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