2017-08-21 39 views
1

我在勾选复选框时无法使用列表框更新。我总共有8个“test_location”复选框,我希望列表框将项目添加到“Steps_Queue_List”,并在检查位置时在“Test_Locations”数组中存储“1”。还想清除复选框未选中时的列表。这工作到目前为止,但我更愿意学习如何为此做一个循环:Visual Basic-循环使列表框更新为选中框

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 

在此先感谢。

+0

这是为什么标签VB6? – DaveInCaz

回答

1

你不需要循环,但你可以用一种方法处理所有事情。

将您的复选框的属性标签设置为从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 
+0

谢谢史蒂夫。这是干什么的: Dim idx = Convert.ToInt32(chk.Tag) 看起来像它只存储所有复选框的“0” – phillip87

+0

如果您将Tag属性设置为1,2,3,4,5,6 ,你的八个复选框为7,8,这应该返回对象Tag属性中的整数,你可以使用这个数字来处理Test_Locations数组的索引,并在列表框中写入相应的项目。 – Steve

+0

请重新检查代码,删除了一个不可思议的然后在Else – Steve