【问题标题】:Select All Controls on Form选择窗体上的所有控件
【发布时间】:2022-11-30 20:59:26
【问题描述】:

我正在尝试在清除文本框内容并取消选中所有复选框的表单上实现一个清除所有按钮。问题是需要访问的控件包含在 Groupboxes 中,因此无法通过 Me.Controls 集合访问。我在这里看到了类似的帖子:VB Uncheck all checked checkboxes in forms,但答案似乎比我预期的要复杂。除了在那篇文章中,还有其他更简单的方法吗?

我试过这段代码,在逻辑上对我来说应该有效,但它没有:

'Get textboes and clears them
For Each ctrGroupBoxes As Control In Me.Controls.OfType(Of GroupBox)
    For Each ctrControls As Control In ctrGroupBoxes.Controls.OfType(Of TextBox)
        ctrControls.Text = ""
    Next
Next
'Get checkboxes and unchecks them
For Each ctrGroupBoxes As Control In Me.Controls.OfType(Of GroupBox)
    For Each ctrControls As Control In ctrGroupBoxes.Controls.OfType(Of CheckBox)
        DirectCast(ctrControls, CheckBox).Checked = False
    Next
Next

我知道内部 for 循环是有效的,因为我用它来为表单上的不同按钮单独清除每个 GroupBox。

任何援助将不胜感激。

【问题讨论】:

  • 这依赖于在表单级别而不是在其他控件中存在组框。要清除所有内容,您必须遍历表单上的所有内容。这是可能的,但当有用户控件时会变得非常混乱。

标签: vb.net


【解决方案1】:

这是一个无论 UI 层次结构如何都应该起作用的选项:

Dim cntrl = GetNextControl(Me, True)

Do Until cntrl Is Nothing
    Dim tb = TryCast(cntrl, TextBox)

    If tb IsNot Nothing Then
        tb.Clear()
    Else
        Dim cb = TryCast(cntrl, CheckBox)

        If cb IsNot Nothing Then
            cb.Checked = False
        End If
    End If

    cntrl = GetNextControl(cntrl, True)
Loop

这将遵循表单上的 Tab 顺序

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-21
    • 2016-11-06
    • 2011-02-13
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    相关资源
    最近更新 更多