我编写了以下类来创建使用自然排序算法的 CheckedListbox。Sort()
然而,被覆盖的方法并没有被解雇。
(该方法中的代码来自 MSDN 示例,关于如何在常规列表框上实现您自己的排序算法。)
Public Class NaturalSortedCheckedListbox
Inherits CheckedListBox
Private _naturalComparer As New NaturalSortComparer
Public Sub New()
MyBase.new()
End Sub
Protected Overrides Sub Sort()
'** A breakpoint on the following line will not get hit.
If Items.Count > 1 Then
Dim swapped As Boolean
Do
Dim counter As Integer = Items.Count - 1
swapped = False
While counter > 0
If _naturalComparer.Compare(Items(counter).ToString(), Items(counter - 1).ToString()) = -1 Then
Dim temp As Object = Items(counter)
Items(counter) = Items(counter - 1)
Items(counter - 1) = temp
swapped = True
End If
counter -= 1
End While
Loop While swapped
End If
End Sub
End Class
CheckedListbox 派生自 Listbox,所以我认为Sort()
覆盖会起作用,但我不知道为什么它不起作用。
我正在设置实例的.Sorted = True
,但它只是使用默认算法对项目进行排序,而不是自然排序算法(已经过测试并显示在其他地方按预期工作)。