vb.net - 循环访问自定义控件类
问题描述
我想在启动时使用一个函数将多个属性应用于自定义控件类。
Public Shared Function ToggleSwitchProperties()
Form1.ToggleSwitch1.OnText = "ON"
Form1.ToggleSwitch1.OnFont = New Font(Form1.Font.FontFamily, 8, FontStyle.Bold)
Form1.ToggleSwitch1.OnForeColor = Color.White
Form1.ToggleSwitch1.OffText = "OFF"
Form1.ToggleSwitch1.OffFont = New Font(Form1.Font.FontFamily, 8, FontStyle.Bold)
Form1.ToggleSwitch1.OffForeColor = Color.White
End Function
这就是我到目前为止所拥有的。我想将这些设置应用于其他 5 个拨动开关(命名ToggleSwitch1
为ToggleSwitch5
),但由于某种原因,我找不到解决方案。
有关情况的更多信息:
我创建了一个带有 TabControl 的表单,开关位于TabPage1
.
拨动开关是定制的(JCS.ToggleSwitch
来自 CodeProject)
解决方案
您可以将控件分组到一个数组中并迭代此临时集合以设置所有引用的控件的属性。您可以按名称调用这些控件,即使它们不是父窗体的直接子级(它们是另一个容器的子级,在本例中是 TabControl 的 TabPage)。
请注意,您使用的 aFunction
不返回值,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。
您还可以使用递归方法搜索和设置特定类型的所有控件的属性,这些控件位于容器或其任何子容器内(在本例中为 aTabPage
内TabControl
)。
在这种情况下,您不需要指定受影响控件的所有名称:该方法将修改它在指定容器中找到的所有控件。
TabControl
在您的情况下,您可以使用包含您的ToggleSwitch
控件作为参数 的 来调用此方法:
编辑:
代码缺少 cast: 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
推荐阅读
- ionic-framework - 如何更改 app.component.ts 中的项目?
- php - 无法通过 php (shell_exec) 访问 tmux 会话
- c# - 如何将我的 C# 代码转换为 LINQ 查询?
- r - 如何在整洁的数据框中映射自举样本的平均值
- python - 通过 Series.value_counts() 使用标准化数字设置小数位数
- javascript - 创建 4 个(开和关)按钮,每个按钮用于修改一个段落
- python - 在linregress python中重新排列标题
- python - 特征选择的单变量线性回归测试?
- python - pycharm输入返回一个int而不是字符串?
- javascript - 用ajax阻止谷歌浏览器扩展