You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中ListView排序后赋值排名仍显示排序前顺序如何解决

问题原因

你为Lv1设置了固定的ListViewItemSorter后,任何对列表项属性(文本、颜色等)的修改都会触发ListView自动重新执行排序逻辑,导致你按顺序填充的序号被再次打乱,看起来就像排序晚于序号赋值执行。

解决方法

在填充序号、修改样式前临时关闭排序规则,操作完成后再根据需求决定是否恢复排序器即可,同时可以搭配BeginUpdate/EndUpdate避免界面闪烁,修改后的代码如下:

Sub paintLeader()
    ' 挂起UI更新,避免修改过程中界面频繁重绘闪烁
    Lv1.BeginUpdate()
    ' 临时保存当前排序器,后续需要时可以恢复
    Dim tempSorter = Lv1.ListViewItemSorter
    ' 移除排序器,避免修改项属性时触发自动排序
    Lv1.ListViewItemSorter = Nothing
    
    For i = 0 To Lv1.Items.Count - 1
        Lv1.Items(i).Text = CStr(i + 1)
        If i = 0 Then
            Lv1.Items(0).ForeColor = Color.Blue
        Else
            Lv1.Items(i).ForeColor = Color.Purple
        End If
    Next
    
    ' 如果后续需要支持点击列头自动排序,就保留下面这行恢复排序器,不需要可以直接删除
    Lv1.ListViewItemSorter = tempSorter
    
    ' 恢复UI更新,一次性渲染所有修改
    Lv1.EndUpdate()
End Sub

原有排序方法sortLv1和调用顺序(先调用sortLv1再调用paintLeader)不需要修改。

内容的提问来源于stack exchange,提问作者Idan Azari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:24:08