代码之家  ›  专栏  ›  技术社区  ›  JFV

禁用VB.NET 2008 Winform Listview中的复选框选择

  •  0
  • JFV  · 技术社区  · 17 年前

    例如:我有一个计时器,它根据选中的Listview项启动备份。经过一段时间后,我不希望最终用户能够单击listview中的任何复选框(因此我有一组要备份的项目),但我希望他们能够在执行备份时滚动列表。我试过这个:

    Private Sub clboxOptions_ItemChecked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs) Handles clboxOptions.ItemChecked
    
    If backupStarted = True Then
       If e.Item.Checked = True Then
          e.Item.Checked = False
       Else
          e.Item.Checked = True
    End If
    

    JFV

    5 回复  |  直到 17 年前
        1
  •  1
  •   GatewayToCode    9 年前

    下面是禁用用户单击listviewitem复选框的另一种方法。

     Public Sub ChangeItemCheckState(ByVal val As Boolean, ByVal index As Integer)
        If Monitor.TryEnter(Me.Items(index), 10) Then
            Try
                Me.Items(index).Checked = val
    
            Finally
                Monitor.Exit(Me.Items(index))
            End Try
        End If
    End Sub
    
    Public Sub ChangeItemCheckState(ByVal val As Boolean, ByVal item As ListViewItem)
        If Monitor.TryEnter(item, 10) Then
            Try
                item.Checked = val
            Finally
                Monitor.Exit(item)
            End Try
        End If
    End Sub
    
    Private Sub ListviewOPC_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles Me.ItemCheck
        If Monitor.IsEntered(Me.Items(e.Index)) Then
            '
        Else
            'prevent click from users
            e.NewValue = e.CurrentValue
        End If
    End Sub
    

    此方法是线程安全的。要更改项目的checkedstate,必须调用ChangeItemCheckState方法。如果要通过单击启用/禁用itemcheck,则必须添加另一个属性。

    Private disableUserCheckItem As Boolean
    Public Property PreventUserCheckItem() As Boolean
        Get
            Return disableUserCheckItem
        End Get
        Set(ByVal value As Boolean)
            disableUserCheckItem = value
        End Set
    End Property
    
     Public Sub ChangeItemCheckState(ByVal val As Boolean, ByVal index As Integer)
        If Monitor.TryEnter(Me.Items(index), 10) Then
            Try
                Me.Items(index).Checked = val
            Finally
                Monitor.Exit(Me.Items(index))
            End Try
        End If
    End Sub
    
    Public Sub ChangeItemCheckState(ByVal val As Boolean, ByVal item As ListViewItem)
        If Monitor.TryEnter(item, 10) Then
            Try
                item.Checked = val
            Finally
                Monitor.Exit(item)
            End Try
        End If
    End Sub
    
    Private Sub ListviewOPC_ItemCheck(sender As Object, e As ItemCheckEventArgs) Handles Me.ItemCheck
        If Monitor.IsEntered(Me.Items(e.Index)) Then
            'do nothing or other nessesary things.
        Else
            'prevent click from users
            If PreventUserCheckItem Then
                e.NewValue = e.CurrentValue
            End If
        End If
    End Sub
    
        2
  •  0
  •   NascarEd    17 年前

        3
  •  0
  •   Grammarian    17 年前

    你可以用 ObjectListView (它是普通.NET ListView的包装器)。它提供了一个回调CheckStatePutter,当用户单击复选框时调用该回调。在该回调中,您可以决定是否接受新的复选框值。

    How do I use checkboxes in my ObjectListView?

        4
  •  0
  •   JFV    17 年前

    “项目检查” 而不是 方法以下代码适用于我:

    Private Sub clboxOptions_ItemCheck(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ItemCheckEventArgs) Handles clboxOptions.ItemCheck
        Try
            If backupStarted = True Then
                If e.CurrentValue <> e.NewValue Then
                    e.NewValue = e.CurrentValue
                Else
                    e.NewValue = e.NewValue
                End If
            End If
    End Sub
    
        5
  •  0
  •   Cha Mildz    8 年前

    我想禁用Listview中的复选框。当我点击按钮去。我使用的是“ItemChecked”方法。我使用以下代码:

    Public Sub CheckBoxChecked(ByVal sender As Object, ByVal e As System.Windows.Forms.ItemCheckedEventArgs)
        Try
            If bCheckFromEvent Then
                bCheckFromEvent = False
                Return
            End If
            If BrunService Then
                bCheckFromEvent = True
                ListView.Items(e.Item.Index).Checked = Not ListView.Items(e.Item.Index).Checked
            End If
    
        Catch ex As Exception
                MsgBox("CheckBoxChecked: " & ex.Message, MsgBoxStyle.Critical Or MsgBoxStyle.OkOnly, "ERROR")
        End Try
    
    End Sub