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
相关产品推荐
相关产品推荐

