gpt4 book ai didi

.net - 自然排序 CheckedListbox

转载 作者:行者123 更新时间:2023-12-04 18:23:21 24 4
gpt4 key购买 nike

我编写了以下类来创建使用自然排序算法的 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 ,但它只是使用默认算法对项目进行排序,而不是自然排序算法(已经过测试并显示在其他地方按预期工作)。

最佳答案

是的,这是一个“怪癖”,有人称其为错误,但在原生 Windows 控件上使用 bolt 连接 .NET 包装器是非常典型的损失。问题是 native Windows 列表框控件已经实现了排序。当您将 Sorted 设置为 True 时,包装器会告诉控件开始对添加的任何项目进行排序。 Sort() 方法被固定以允许自定义排序顺序,这显然很有用。

麻烦的是,该方法仅在您将 Sorted 设置为 true 时运行。每次添加新项目时,它都不会调用 Sort()。如果在添加项目时 Sorted 已经为真,那么它是排序的 native 控件。自定义订单时明显失败的鲸鱼。

您需要做的是强制 Sort() 方法再次运行。这需要像这样的愚蠢代码:

    MyCheckedListBox1.Items.Add("sortdammit")
MyCheckedListBox1.Sorted = False
MyCheckedListBox1.Sorted = True

请注意,这很昂贵,因此如果您添加多个项目,请等待切换已排序,直到您将它们全部添加。引起怪癖的是费用。

关于.net - 自然排序 CheckedListbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10212474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com