【问题标题】:check checkboxes status and write checkbox label in vb.net using a for next loop使用 for next 循环检查复选框状态并在 vb.net 中写入复选框标签
【发布时间】:2016-10-28 00:25:51
【问题描述】:

我在 vb 2008 express 用户窗体的组框中有几个复选框。我想在单击命令按钮时检查每个检查的状态,然后写下要在电子邮件中使用或打印出来的复选框标题。我尝试了几种方法,但总是以同样的错误“无效的转换异常”告终。我已经阅读了 msdn 上的帮助,但仍然不明白如何使其工作。这是我一直在尝试的代码

Dim chk As CheckBox
    Dim sb As New System.Text.StringBuilder
    Dim names As String
    For Each chk In gbInterior.Controls
        If chk.Checked Then
            sb.Append(chk.Text)
        End If
    Next chk
    names = sb.ToString(0, sb.Length - 32)
    MsgBox(names)

我也试过下面的代码,但不知道如何检查状态和打印复选框标题。

Dim ctl As Control
    For Each ctl In gbInterior.Controls
    If TypeOf ctl Is CheckBox Then
    MsgBox(ctl.Text & vbNewLine)
    End If
    Next ctl

感谢您的帮助。

【问题讨论】:

    标签: vb.net checkbox


    【解决方案1】:

    您似乎正在寻找 Control 上的 Checked 属性,但它没有这样的属性。

    尝试将变量声明为 CheckBox 并按控件类型过滤列表:

    For Each chk As CheckBox In gbInterior.Controls.OfType(Of CheckBox)()
      If chk.Checked Then
        sb.Append(chk.Text)
      End If
    Next
    

    【讨论】:

    • 感谢您不仅提供了正确的代码,更重要的是解释了我的错误。我从来没有得到所有正确的答案,所以我可以检查所有答案吗?既然您已经帮助我度过了这个难关,我该如何将结果写入电子邮件正文?我使用 msgbox 进行测试。我在邮件正文中使用 + vbCrLf + "cabinet lock is " + cbLock.Text _。
    • @UBel 将sb.Append(...) 更改为sb.AppendLine(...),这会将每个文本项放在单独的行上。如果您询问是否将其实际插入到电子邮件正文中,那有点超出了这个问题的范围,但很容易用谷歌搜索。只有一个帖子可以被标记为 asnwer,但如果 任何 个答案对您有帮助,您可以对其中任何一个进行投票,而不仅仅是您的问题。
    • 非常感谢,这是您第二次帮助我,非常感谢您的知识。
    【解决方案2】:

    您的问题源于循环遍历表单上的所有控件并尝试将每个控件设置为复选框类型的控件。复选框只是一种单一类型的控件,无法将按钮投射到其中,这就是您遇到投射问题的原因。

    Dim ctrl As Control
    Dim sb As New System.Text.StringBuilder
    Dim names As String
    For Each ctrl In gbInterior.Controls
        If TypeOf ctrl Is CheckBox andalso CType(ctrl, CheckBox).Checked Then
            sb.Append(CType(ctrl, CheckBox).Text)
        End If
    Next ctrl 
    names = sb.ToString(0, sb.Length - 32)
    MsgBox(names)
    

    【讨论】:

    • 感谢您对我的错误的解释。我收到了 3 个答案,所有答案都是正确的,并回答了我的问题。我可以全部勾选吗?
    【解决方案3】:
    If TypeOf ctl Is CheckBox AndAlso CType(ctl, CheckBox).Checked Then  
       MsgBox(CType(ctl, CheckBox).Text & vbNewLine) 
    End If 
    

    【讨论】: