Отключение выбора флажков в VB .NET 2008 Winform Listview - PullRequest
0 голосов
/ 06 мая 2009

Как отключить дополнительные флажки выбора / отмены выбора без ущерба для функциональности ListView? Я знаю, что вы можете вызвать: ListView.Enabled = False, но это также отключает любую прокрутку внутри него.

Например: у меня есть таймер, который запускает резервное копирование на основе проверенных элементов 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 ]

1 голос
/ 02 января 2017

Вот еще один способ отключить пользователей: установите флажок 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

этот метод является потокобезопасным. Чтобы изменить проверенное состояние элемента, вы должны вызвать методы ChangeItemCheckState. Если вы хотите включить / отключить проверку элемента с помощью щелчка, вам нужно добавить другое свойство.

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
0 голосов
/ 04 сентября 2018

Я хочу отключить CheckBox в Listview. Когда я нажимаю кнопку Go. Я использовал метод 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
0 голосов
/ 13 мая 2009

Вы можете использовать ObjectListView (который является оболочкой для обычного .NET ListView). Он обеспечивает обратный вызов CheckStatePutter, который вызывается, когда пользователь нажимает на флажок. В этом обратном вызове вы можете решить, принимать ли новое значение флажка или нет.

Это рецепт, описывающий этот процесс: Как использовать флажки в моем ObjectListView?

0 голосов
/ 25 мая 2009

Я узнал, в чём была моя проблема. Я использовал ItemChecked вместо ItemCheck Метод. У меня работает следующий код:

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
0 голосов
/ 06 мая 2009

Вместо использования встроенного свойства CheckBoxes, вы можете нарисовать флажки самостоятельно.

Google вокруг и найти пример OwnerDraw ListView. Нарисуйте флажки самостоятельно. Добавьте новое свойство в свой ListView (что-то вроде ReadOnly). Если для ReadOnly установлено значение true, установите флажки как отключенные и игнорируйте сообщения о щелчках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...