版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/rdsuncn1977/article/details/51915312
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