如何在 .NET 2.0 WinForms ListView 中设置具有标题排序字形的列及其方向?



listview is .net 不是托管控件,它是 Win32 ListView 通用控件的一个非常薄的包装器。它甚至不是一个很好的包装器——它没有公开真实 ListView 的所有功能。

Win32 ListView 公共(public)控件支持使用主题绘制自身。主题元素之一是标题排序箭头。 Windows 资源管理器的 ListView 公共(public)控件知道如何使用该主题元素绘制其列之一。

  • Win32 ListView 是否支持指定哪一列的排序顺序?
  • 是否支持 ListView 内部使用的 Win32 header 控件支持指定哪个列具有什么排序顺序?
  • win32的header控件是否支持自定义绘制,所以我可以自己绘制header sort glyph?
  • win32 listview控件支持自定义header绘制,所以我可以自己绘制header sort glyph吗?
  • .NET ListView 控件是否支持自定义标题绘制,所以我可以自己绘制标题排序字形?
  • 最佳答案

    如果有人需要快速解决方案(它在列标题文本的开头绘制向上/向下箭头):

    ListViewExtensions.cs:

    public static class ListViewExtensions
    {
        public static void DrawSortArrow(this ListView listView, SortOrder sortOrder, int colIndex)
        {
            string upArrow = "▲   ";
            string downArrow = "▼   ";
    
            foreach (ColumnHeader ch in listView.Columns)
            {
                if (ch.Text.Contains(upArrow))
                    ch.Text = ch.Text.Replace(upArrow, string.Empty);
                else if (ch.Text.Contains(downArrow))
                    ch.Text = ch.Text.Replace(downArrow, string.Empty);
            }
    
            if (sortOrder == SortOrder.Ascending)
                listView.Columns[colIndex].Text = listView.Columns[colIndex].Text.Insert(0, downArrow);
            else
                listView.Columns[colIndex].Text = listView.Columns[colIndex].Text.Insert(0, upArrow);
        }
    }
    

    用法:
    private void lstOffers_ColumnClick(object sender, ColumnClickEventArgs e)
    {
        lstOffers.DrawSortArrow(SortOrder.Descending, e.Column);
    }
    

    关于listview - 如何在 .NET ListView 中设置标题排序字形?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/73320/

    10-15 18:21