【问题标题】:Validating checkboxes验证复选框
【发布时间】:2016-12-05 09:58:23
【问题描述】:

我是编程初学者,我有 3 个复选框和 1 个文本框。 当 CheckBox1 和 CheckBox2 被选中时,TextBox 中的文本应为 1,否则应为 0。

这是我的代码:

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged,
    CheckBox2.CheckedChanged

    If CheckBox1.Checked And CheckBox2.Checked Then
       TextBox1.Text = 1
    Else
       TextBox1.Text = 0
    End If
End Sub

这有效,但当我检查所有三个时,TextBox 不会更改为 0 并且仍然是 1。我该如何解决这个问题?我试图将我的代码更改为

Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged,
    CheckBox2.CheckedChanged

    If CheckBox1.Checked And CheckBox2.Checked Then
       TextBox1.Text = 1
    ElseIf CheckBox1.Checked And CheckBox2.Checked And Checkbox3.Checked Then
       TextBox1.Text = 0
    Else
       TextBox1.Text = 0
    End If
End Sub

是否可以将所有复选框分组到一个数组中?然后我会统计是否有超过 2 个 CheckBoxes 被选中,然后做一些事情。

【问题讨论】:

  • 尝试使用 Checkbox1.checked = True AND Checkbox2.checked = True
  • 开启 Option Strict - 它会为您省去很多烦恼(以及简单的 SO 问题)。 TextBox1.Text = 1 之类的无效
  • @GNMercado 我试过了,但它不起作用。
  • @GNMercado,当您可以只使用第一个 Boolean 时,将一个 Boolean 与另一个 Boolean 进行比较以获得第三个 Boolean 有什么意义? CheckBox1.Checked = True 的计算结果与 CheckBox1.Checked 完全相同,那么比较的意义何在?
  • 使用 VS 内置的方便且强大的调试器可以轻松解决这种“困境”。设置断点并观察代码执行。使用鼠标查看变量内容。您将学到很多关于编程的知识。

标签: vb.net checkbox


【解决方案1】:

问题是您的订单。在这种情况下:

If CheckBox1.Checked And CheckBox2.Checked Then
   TextBox1.Text = 1
ElseIf CheckBox1.Checked And CheckBox2.Checked And Checkbox3.Checked Then
   TextBox1.Text = 0
Else
   TextBox1.Text = 0
End If

第二个条件永远不会被测试,因为它是True,第一个条件也将是True,并且已经匹配。您需要交换前两个条件:

If CheckBox1.Checked And CheckBox2.Checked And Checkbox3.Checked Then
   TextBox1.Text = "0"
ElseIf CheckBox1.Checked And CheckBox2.Checked Then
   TextBox1.Text = "1"
Else
   TextBox1.Text = "0"
End If

您也应该使用AndAlso 而不是And

【讨论】:

    【解决方案2】:

    是否可以将所有复选框分组到一个数组中?然后我会数 如果选中了超过 2 个 CheckBox,则执行某些操作。

    通过在“Handles”关键字之后列出每个复选框来创建一个处理程序来触发所有三个复选框(向右滚动以查看第一行的末尾):

    Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
    
    End Sub
    

    现在计算有多少 CheckBox 被选中并采取相应措施:

    Private Sub CheckBoxes_CheckedChanged(sender As Object, e As EventArgs) Handles CheckBox1.CheckedChanged, CheckBox2.CheckedChanged, CheckBox3.CheckedChanged
        Dim CheckCount As Integer
        Dim CheckBoxes() As CheckBox = {CheckBox1, CheckBox2, CheckBox3}
        For Each CB As CheckBox In CheckBoxes
            If CB.Checked Then
                CheckCount = CheckCount + 1
            End If
        Next
        TextBox1.Text = If(CheckCount >= 2, 1, 0)
    End Sub
    

    【讨论】:

    • 不幸的是,OP相当不清楚。该代码将按照最后一行中的要求执行,但最后一行与之前的要求相矛盾。
    猜你喜欢
    • 2015-08-29
    • 2013-04-19
    • 2012-03-03
    • 2011-10-11
    • 2018-12-14
    • 2016-09-17
    • 1970-01-01
    相关资源
    最近更新 更多