【问题标题】:Visual Basic- Loop to make listbox update as checkbox is checkedVisual Basic-循环以在选中复选框时更新列表框
【发布时间】:2017-08-22 23:23:27
【问题描述】:

我在选中复选框时无法更新列表框。我总共有 8 个“test_location”复选框,我希望列表框在选中位置时将项目添加到“Steps_Queue_List”并在“Test_Locations”数组中存储“1”。还想在未选中复选框时清除列表。到目前为止这是可行的,但我更愿意学习如何为此创建一个循环:

Private Sub Location_CheckBox_1_CheckedChanged(sender As Object, e As EventArgs) Handles Location_CheckBox_1.CheckedChanged
    If Location_CheckBox_1.Checked Then
        Test_Locations(0) = 1
        Steps_Queue_List.Items.Add("test for location" & 1, 1)

    ElseIf Location_CheckBox_1.Checked = False Then
        Test_Locations(0) = 0
        Steps_Queue_List.Items.RemoveAt(0)
    End If
End Sub

Private Sub Location_CheckBox_2_CheckedChanged(sender As Object, e As EventArgs) Handles Location_CheckBox_2.CheckedChanged
    If Location_CheckBox_2.Checked Then
        Test_Locations(1) = 1
        Steps_Queue_List.Items.Add("test for location" & 2, 2)

    ElseIf Location_CheckBox_2.Checked = False Then
        Test_Locations(1) = 0
        Steps_Queue_List.Items.RemoveAt(0)
    End If
End Sub

Private Sub Location_CheckBox_3_CheckedChanged(sender As Object, e As EventArgs) Handles Location_CheckBox_3.CheckedChanged
    If Location_CheckBox_3.Checked Then
        Test_Locations(2) = 1
        Steps_Queue_List.Items.Add("test for location" & 3, 3)

    ElseIf Location_CheckBox_3.Checked = False Then
        Test_Locations(2) = 0
        Steps_Queue_List.Items.RemoveAt(0)
    End If
End Sub

提前致谢。

【问题讨论】:

  • 为什么标记为 VB6?

标签: vb.net checkbox listbox


【解决方案1】:

您不需要循环,但您可以在一个方法中处理所有事情。

将 Checkboxes 的属性 Tag 设置为从 1 到 8 的渐进值,以匹配您希望在列表框中显示的文本值。

然后设置一个事件处理程序来管理所有 CheckBox 的所有 CheckBoxChanged 事件。

在此事件处理程序中检索标记并使用它来处理数组索引和要更新的列表框

' Handle all Checkbox changed with the same handler
Private Sub OnCheckBoxChanged(sender As Object, e As EventArgs) 
Handles Location_CheckBox_1.CheckedChanged,Location_CheckBox_2.CheckedChanged,
        Location_CheckBox_3.CheckedChanged,Location_CheckBox_4.CheckedChanged,
        Location_CheckBox_5.CheckedChanged,Location_CheckBox_6.CheckedChanged,
        Location_CheckBox_7.CheckedChanged,Location_CheckBox_8.CheckedChanged

    ' Discover which checkbox has been clicked
    Dim chk = DirectCast(sender, CheckBox)

    ' Now read the value of the Tag property of that checkbox
    Dim idx = Convert.ToInt32(chk.Tag)
    If chk.Checked Then
        Test_Locations(idx - 1) = 1
        Steps_Queue_List.Items.Add("test for location" & idx, idx)
    Else
        Test_Locations(idx - 1) = 0
        Steps_Queue_List.Items.RemoveAt(0)
    End If
End Sub

【讨论】:

  • 谢谢史蒂夫。这是做什么的?: Dim idx = Convert.ToInt32(chk.Tag) 看起来它只为所有复选框存储“0”
  • 如果您将八个复选框的 Tag 属性设置为 1,2,3,4,5,6,7,8,这应该从对象 Tag 属性返回整数,您可以使用此数字解决 Test_Locations 数组的索引并在列表框中写入适当的项目。
  • 请重新检查代码,去掉一个奇怪的 Then 后面的 Else
  • 明白了。是的,我在运行它时删除了“then”。非常感谢!我不知道您可以“标记”复选框。现在工作得很好。
猜你喜欢
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-06
  • 2019-02-02
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
相关资源
最近更新 更多