如何从无限循环(VB)中阻止CheckedListBox ItemCheck?

时间:2015-08-21 20:59:33

标签: vb.net checkedlistbox

我的CheckedListBox的ItemCheck事件有问题。 CheckedListBox有很多项目,还有一个' All'项目位于顶部。

我想处理下面的3种情况,但是我遇到了无限循环错误。任何想法如何防止这种情况发生?提前谢谢。

(1)检查/取消选中'全部'项目已选中/未选中

(2)未经检查'全部'项目(如果未选中任何单个项目)

(3)检查'全部'如果检查了所有项目,则为项目

If e.CurrentValue <> e.NewValue Then
    If e.NewValue = CheckState.Checked Then
        If e.Index = 0 Then
            For i = 1 To .Items.Count - 1
                .SetItemCheckState(i, CheckState.Checked)
            Next
        Else
            If .CheckedItems.Count >= .Items.Count - 1 Then
                .SetItemCheckState(i, True)
            End If
        End If
    Else
        If e.Index = 0 Then
            For i = 1 To .Items.Count - 1
                .SetItemCheckState(i, CheckState.Unchecked)
            Next
        Else
            .SetItemCheckState(0, CheckState.Unchecked)
        End If
    End If
End If

1 个答案:

答案 0 :(得分:0)

尝试删除事件处理程序,执行更改,然后将其重新添加到:

With CheckedListBox1
  RemoveHandler .ItemCheck, AddressOf CheckedListBox1_ItemCheck
  Dim i As Integer
  If e.CurrentValue <> e.NewValue Then
    If e.NewValue = CheckState.Checked Then
      If e.Index = 0 Then
        For i = 1 To .Items.Count - 1
          .SetItemCheckState(i, CheckState.Checked)
        Next
      Else
        If .CheckedItems.Count >= .Items.Count - 1 Then
          .SetItemCheckState(i, CheckState.Checked)
        End If
      End If
    Else
      If e.Index = 0 Then
        For i = 1 To .Items.Count - 1
          .SetItemCheckState(i, CheckState.Unchecked)
        Next
      Else
        .SetItemCheckState(0, CheckState.Unchecked)
      End If
    End If
  End If
  AddHandler .ItemCheck, AddressOf CheckedListBox1_ItemCheck
End With