Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
禁用VB.NET 2008 Winform Listview中的复选框选择_Vb.net_Winforms_Visual Studio 2008_.net 3.5_Listview - Fatal编程技术网

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

禁用VB.NET 2008 Winform Listview中的复选框选择,vb.net,winforms,visual-studio-2008,.net-3.5,listview,Vb.net,Winforms,Visual Studio 2008,.net 3.5,Listview,如何在不牺牲ListView功能的情况下禁用其他复选框选择/取消选择?我知道您可以调用:ListView.Enabled=False,但这也会禁用其中的任何滚动 例如:我有一个计时器,它根据选中的Listview项启动备份。经过一段时间后,我不希望最终用户能够单击listview中的任何复选框(因此我有一组要备份的项目),但我希望他们能够在执行备份时滚动列表。我试过这个: Private Sub clboxOptions_ItemChecked(ByVal sender As System.Ob

如何在不牺牲ListView功能的情况下禁用其他复选框选择/取消选择?我知道您可以调用:ListView.Enabled=False,但这也会禁用其中的任何滚动

例如:我有一个计时器,它根据选中的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

您可以自己绘制复选框,而不是使用内置的checkbox属性

谷歌搜索并找到OwnerDraw ListView的一个示例。自己画复选框。向ListView添加一个新属性(类似ReadOnly)。当ReadOnly为true时,将复选框绘制为禁用,并忽略单击消息。

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


这是一个描述这个过程的配方:

我发现了我的问题所在。我使用的是“ItemChecked”而不是“ItemChecked”方法。以下代码适用于我:

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
Private Sub-clboxOptions\u ItemCheck(ByVal sender作为System.Object,ByVal e作为System.Windows.Forms.ItemCheckEventArgs)处理clboxOptions.ItemCheck
尝试
如果backupStarted=True,则
如果e.CurrentValue e.NewValue,则
e、 NewValue=e.CurrentValue
其他的
e、 NewValue=e.NewValue
如果结束
如果结束
端接头

下面是另一种禁用用户单击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

我想禁用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

我不太明白你的问题。。。你能更具体一点或者提供一个例子吗?也许是这样:如果backupStarted=True,那么e.NewValue=e.CurrentValue End如果