我做一个类似资源管理器的程序。
但是ListView提供的Sorting属性只能把所有Item一起排序,我的listView中有文件和目录,我想把文件和目录分开排序,怎么办?就是象Windows自带的资源管理器一样,当点击ColumnHead时按Column属性排序,请指点一下如何实现,谢谢!

解决方案 »

  1.   

    改列顺序的,但是应该对排序也有用
    http://blog.joycode.com/jiangsheng/archive/2005/01/07/42514.aspx
      

  2.   

    谢谢jiangsheng,你的Blog写得很好。这个问题的麻烦在于,分开文件和目录,所以在要判断每一个SubItem是文件还是目录,然后再Compare。下面是以前的帖子中找到的类,怎么改好?public class ListViewItemComparer : IComparer
    {
    public int col;

    public ListViewItemComparer()
    {
    col = 0;
    }

    public ListViewItemComparer(int column)
    {
    col = column;
    }

    public int Compare(object x, object y)
    {
    return String.Compare(((ListViewItem)x).SubItems[col].Text, ((ListViewItem)y).SubItems[col].Text);
    }
    }
      

  3.   

    什么叫列表?是不是先把SubItem的Text读入一个数组,然后排序?但是要分两个数组,读入时要判断是文件还是目录,有没有简便方法?
      

  4.   

    live41 你好,帮你up  我现在也做一个类似资源管理器的程序,刚开始学习C#,呵呵,有时间向你请教一下
      

  5.   

    谢谢楼上的,做资源管理器最麻烦的两个地方是 取32位图标和布局,我的Dock都乱糟糟的,而且不知道怎么更改控件的创建顺序,不过这和本帖无关,呵呵,大家不用回答。
      

  6.   

    对了,怎样判断SubItem是文件还是目录?
    我是用Column来判断的,文件取有后面的属性,目录没取。
      

  7.   

    如果我把SubItem的Text放进数组,怎么排出来?String.Sort吗?复杂的地方是,文件有另外三个Column,就是大小类型和修改时间,如果排序,我是要把它们先储存起来,还是排完序后再获取一次这些信息?
      

  8.   

    “用虚列表,把数据在内存里面排好之后刷一下就好了。” ——高手的指点令在下莫名疑惑
    什么是虚列表?我要怎么把数据读到内存?我要分开目录和文件分别排序,然后刷新的话,文件后面还有信息,是重新再获取吗还是在读入的时候一起读入?PS:我越心急,csdn的人就越喜欢潜水,我都骂得口水干了。
      

  9.   

    设置ListView控件的virtualmode属性
    用.net 1.1的话,参考http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/listview/listview_using.asp?frame=true#Using_Virtual_ListView_Controls