如何使ListView复选框像单选按钮一样反应

时间:2012-12-21 14:05:14

标签: vb.net listview checkbox radio-button

我的列表视图中有几个项目是复选框。

我设法在listview“ItemChecked”事件中使用此代码:

For Each item In lwSources.Items
    If Not item.Index = e.Item.Index Then item.Checked = False
Next

问题在于它没有正确反应。例如,如果未选择任何一个,我单击一次并正确选择该项。如果我尝试单击另一个项目(未选中),那么我检查的第一个项目将被取消选中,我必须再次单击以检查我当前想要的项目。

它需要的点击量超过需要的数量...

3 个答案:

答案 0 :(得分:2)

经过一个小时的尝试,我终于做到了。

首先像这样设置一个全局变量..

Dim a As Integer = 0

在正常点击事件中,将其设置为0,将首先触发。

    Private Sub ListView1_Click(sender As System.Object, e As System.EventArgs) Handles   ListView1.Click
     a = 0
    End Sub

在选中的listview项目中,检查a = 0。

Private Sub ListView1_ItemChecked(sender As System.Object, e As System.Windows.Forms.ItemCheckedEventArgs) Handles ListView1.ItemChecked

    If a = 0 Then
        For Each item In lwSources.Items
            a = 1
            If Not item.Index = e.Item.Index Then
                item.Checked = False
            End If
        Next
    End If
End Sub

我认为问题在于,当我们更改已检查的值时,它会再次触发事件,但没有发送者,这就是为什么它们都进入未选中状态的原因。

答案 1 :(得分:0)

在这种情况下设置此条件并尝试....

For Each item In lwSources.Items
      If  item.Index = e.Item.Index Then
       item.Checked = true
      End If
 Next

答案 2 :(得分:0)

嘿,你那边你的代码很棒,如果你把你的代码放在ItemCheck事件而不是像这样的ItemChecked事件中它也会很棒

Private Sub IMFavIconList_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles IMFavIconList.ItemCheck For Each item In sender.Items If Not item.Index = e.Index Then item.Checked = False Next End Sub

这对我哥们很有用!