CheckedListBox里Disable指定项

Public Class tsCheckedListBox
    Inherits CheckedListBox
    Private _checkedAndDisabledItems As New List(Of String)()
    Private _checkedAndDisabledIndexes As New List(Of Integer)()

    Public Sub CheckAndDisable(item As String)
        _checkedAndDisabledItems.Add(item)
        Me.Refresh()
    End Sub

    Public Sub CheckAndDisable(index As Integer)
        _checkedAndDisabledIndexes.Add(index)
        Me.Refresh()
    End Sub

    Public Sub CheckAndEnable(item As String)
        _checkedAndDisabledItems.Remove(item)
        Me.Refresh()
    End Sub

    Public Sub CheckAndEnable(index As Integer)
        _checkedAndDisabledIndexes.Remove(index)
        Me.Refresh()
    End Sub

    Protected Overrides Sub OnDrawItem(e As DrawItemEventArgs)
        If Items.Count = 0 Then
            Exit Sub
        End If
        Dim s As String = Items(e.Index).ToString()

        If _checkedAndDisabledItems.Contains(s) OrElse _checkedAndDisabledIndexes.Contains(e.Index) Then
            'Dim state As System.Windows.Forms.VisualStyles.CheckBoxState = System.Windows.Forms.VisualStyles.CheckBoxState.CheckedDisabled
            Dim state As System.Windows.Forms.VisualStyles.CheckBoxState = System.Windows.Forms.VisualStyles.CheckBoxState.UncheckedDisabled
            If GetItemChecked(e.Index) Then
                state = System.Windows.Forms.VisualStyles.CheckBoxState.CheckedDisabled
            End If
            Dim glyphSize As Size = CheckBoxRenderer.GetGlyphSize(e.Graphics, state)
            ' 画Checkbox
            CheckBoxRenderer.DrawCheckBox(e.Graphics, New Point(e.Bounds.X + 1, e.Bounds.Y + 1), New Rectangle(New Point(e.Bounds.X + glyphSize.Width + 3, e.Bounds.Y), New Size(e.Bounds.Width - glyphSize.Width, e.Bounds.Height)), s, Me.Font, TextFormatFlags.Left, _
                False, state)
        Else
            MyBase.OnDrawItem(e)
        End If
    End Sub
    ' 点击无效处理
    Protected Overrides Sub OnItemCheck(e As ItemCheckEventArgs)
        If Items.Count = 0 Then
            Exit Sub
        End If
        Dim s As String = Items(e.Index).ToString()
        If _checkedAndDisabledItems.Contains(s) OrElse _checkedAndDisabledIndexes.Contains(e.Index) Then
            e.NewValue = e.CurrentValue
        End If
    End Sub

    Public Sub ClearDisabledItems()
        _checkedAndDisabledIndexes.Clear()
        _checkedAndDisabledItems.Clear()
        Me.Refresh()
    End Sub

End Class
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值