遍历自定义控件类

时间:2019-02-23 22:20:34

标签: vb.net winforms class

我想在启动时使用一个函数将几个属性应用于自定义控件类。

ToggleSwitch1

这是我到目前为止所拥有的。我想将这些设置应用到其他5个切换开关(命名为ToggleSwitch5TabPage1),但是由于某种原因,我找不到解决方法。
有关情况的更多信息:

我创建了一个带有TabControl的窗体,并且开关位于JCS.ToggleSwitch上。
拨动开关是定制的(来自CodeProject的 ul

1 个答案:

答案 0 :(得分:0)

您可以将控件分组到一个数组中,并迭代此临时集合以设置所有引用的控件的属性。即使这些控件不是“父窗体”的直接子级(在这种情况下,它们是另一个容器的子级,也就是TabControl的TabPage),也可以按名称​​调用

请注意,您使用的Function不会返回值,而是将其设为Sub
staticShared)方法似乎不适用于引用控件实例。
另请参见此方法是否需要为Public。可能不会。
让我们将其设置为internalFriend),看看是否还可以。

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