选中复选框状态并在vb.net中使用for next循环写入复选框标签

选中复选框状态并在vb.net中使用for next循环写入复选框标签,vb.net,checkbox,Vb.net,Checkbox,我在vb 2008 express用户窗体的groupbox中有几个复选框。我想在单击命令按钮时检查每个按钮的选中状态,然后在电子邮件或打印输出中使用复选框标题。我尝试过几种方法,但最终总是出现相同的错误“无效的强制转换异常”。我已经阅读了msdn的帮助,但仍然不明白如何使其工作。这是我一直在尝试的代码 Dim chk As CheckBox Dim sb As New System.Text.StringBuilder Dim names As String For E

我在vb 2008 express用户窗体的groupbox中有几个复选框。我想在单击命令按钮时检查每个按钮的选中状态,然后在电子邮件或打印输出中使用复选框标题。我尝试过几种方法,但最终总是出现相同的错误“无效的强制转换异常”。我已经阅读了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

感谢您的帮助。

您的问题源于在表单上的所有控件之间循环,并试图将每个控件设置为checkbox类型的控件。复选框只是一种类型的控件,不能在其中强制转换按钮,因此您会遇到强制转换问题

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)

您的问题源于循环遍历表单上的所有控件,并试图将每个控件设置为checkbox类型的控件。复选框只是一种类型的控件,不能在其中强制转换按钮,因此您会遇到强制转换问题

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)

看起来您正在查找
控件
上的
Checked
属性,该控件没有这样的属性

尝试将变量声明为复选框,并按控件类型筛选列表:

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

看起来您正在查找
控件
上的
Checked
属性,该控件没有这样的属性

尝试将变量声明为复选框,并按控件类型筛选列表:

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

感谢您不仅提供了正确的代码,更重要的是解释了我的错误。我从来没有得到所有正确答案,所以我可以检查所有答案吗?既然你已经帮助我克服了这一困难,我该如何将结果写入电子邮件正文?我使用msgbox进行测试。我正在使用+vbCrLf+“CAB lock是电子邮件正文中的“+cbLock.Text”@UBel Change
sb.Append(…)
sb.AppendLine(…)
,这将把每个文本项放在一个单独的行上。如果你问的是如何将其插入电子邮件正文,这有点超出了这个问题的范围,但谷歌很容易找到。只有一篇文章可以标记为asnwer,但如果任何答案对您有帮助,您可以对其中任何一篇进行投票,而不仅仅是对您的问题。非常感谢,这是您第二次帮助我,非常感谢您的知识。感谢您不仅提供了正确的代码,而且更重要的是解释了我的错误。我从来没有得到所有正确答案,所以我可以检查所有答案吗?既然你已经帮助我克服了这一困难,我该如何将结果写入电子邮件正文?我使用msgbox进行测试。我正在使用+vbCrLf+“CAB lock是电子邮件正文中的“+cbLock.Text”@UBel Change
sb.Append(…)
sb.AppendLine(…)
,这将把每个文本项放在一个单独的行上。如果你问的是如何将其插入电子邮件正文,这有点超出了这个问题的范围,但谷歌很容易找到。只有一篇文章可以被标记为asnwer,但如果任何答案对你有帮助,你可以对其中任何一篇进行投票,而不仅仅是对你的问题。非常感谢,这是你第二次帮助我,非常感谢你的知识。谢谢你对我错误的解释。我收到了3个答案,都是正确的,回答了我的问题。我能核对所有回答吗?谢谢你对我错误的解释。我收到了3个答案,都是正确的,回答了我的问题。我能核对所有回答吗?