CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

ListView 控件中如何用子项排序

楼主jxhywdh(wdhwdh)2001-08-11 08:21:34 在 C++ Builder / 基础类 提问

就像   资源管理器中可以用   文件名   文件大小   日期   等都   可以排序    
    另外   如何使用反序排列!!!!!!! 问题点数:20、回复次数:2Top

1 楼yeqiufeng(叶秋枫)回复于 2001-08-11 08:51:24 得分 0

看看帮助吧  
   
  有写好的哥们给他贴个  
   
  @_@Top

2 楼HUANG_JH(保卫钓鱼岛)回复于 2001-08-11 09:03:48 得分 20

原创  
   
                                                在C++Builder5.0中实现ListView的列标头点击排序功能    
   
   
      ----   列表框控件在C++Builder应用程序中的使用率很高,例如我们经常使用的资源管理器,它有四种常见的式样:显示大图标,小目标,含有图标的多列列表,含有列标头的列表。我们也经常见到一些扩展功能,例如我们在资源管理器中的文件列表框中,在选用详细资料察看时,用鼠标单击列标头,如大小,则所列文件按大小排序;单机日期,则按文件日期进行排序.这一功能增强了应用程序的可用性,使操作更直观、方便。  
   
          在C++Builder中只能根据项目的首列加以排序,不能根据子项目(SubItems)排序。如果需要根据子项目(SubItems)排序,则必须要自己写代码来实现。  
   
  ----   以下描述如何在C++Builder5.0上为列表框添加列标头点击排序功能。  
  ----   首先新建一个窗体,其名称为Form1,在窗体添加一个列表框控件,其名称为ListView1。  
            修改ListView1属性值,  
            将ViewStyle设置为vsReport。  
            将SortType   设置为None。    
   
  ----   双击ListView1,添加列和子列。在例子中,我们添加4个列标头,Caption属性分别是:TEST1,TEST2,        
            TEST3,TEST4。  
  ----   单击ListView1的Items属性,通过NEW   ITEM,   NEW   SUBITEM   来添加子列和主列上的内容。我们可以随意      
            填入一些内容。以便排序。  
             
       
      分别在ListView1ColumnClick,ListView1Compare   事件中添加以下代码:  
      void   __fastcall   TForm1::ListView1ColumnClick(TObject   *Sender,TListColumn   *Column)  
  {  
      Screen->Cursor=crHourGlass;  
      ColumnToSort   =   Column->Index;  
      ListView1->CustomSort(NULL,ColumnToSort);  
      Screen->Cursor=crDefault;  
  }  
   
   
   
   
  void   __fastcall   TForm1::ListView1Compare(TObject   *Sender,   TListItem   *Item1,  
              TListItem   *Item2,   int   Data,   int   &Compare)  
  {  
      AnsiString   a,a1,a2,a3,b,b1,b2,b3;  
          if   (ColumnToSort==0)  
                  Compare   =   CompareText(Item1->Caption,Item2->Caption);  
          else  
        {  
   
  /*  
        ----   点击其它子列时,需要将所点击的列内容从Item1->SubItems[i].Text中抽出,并参照其进行排序。子列的内容在存储中,形式为   :子项目1\r\n子项目2\r\n子项目3\r\n...子项目N\r\n。  
  我们抽取其中各个子项目,存放到变量   a1,a2,a3,b1,b2,b3   中,编写如下代码:  
  */  
              a=Item1->SubItems[0].Text;  
              b=Item2->SubItems[0].Text;  
   
              a1=a;  
              b1=b;  
              a1.Delete(a1.AnsiPos("\r\n"),a1.Length()   -   a1.AnsiPos("\r\n"));  
              b1.Delete(b1.AnsiPos("\r\n"),b1.Length()   -   b1.AnsiPos("\r\n"));  
              a1.Delete(a1.Length(),1);  
              b1.Delete(b1.Length(),1);  
   
              a2=a;  
              b2=b;  
              a2.Delete(1,a2.AnsiPos("\r\n"));  
              b2.Delete(1,b2.AnsiPos("\r\n"));  
              a2.Delete(a2.AnsiPos("\r\n"),a2.Length()   -   a2.AnsiPos("\r\n"));  
              b2.Delete(b2.AnsiPos("\r\n"),b2.Length()   -   b2.AnsiPos("\r\n"));  
              a2.Delete(a2.Length(),1);  
              b2.Delete(b2.Length(),1);  
              a3=a;  
              b3=b;  
              a3.Delete(1,a3.AnsiPos("\r\n"));  
              b3.Delete(1,b3.AnsiPos("\r\n"));  
              a3.Delete(1,a3.AnsiPos("\r\n"));  
              b3.Delete(1,b3.AnsiPos("\r\n"));  
              a3.Delete(a3.Length(),1);  
              b3.Delete(b3.Length(),1);  
   
        switch   (ColumnToSort){  
        case   1:       {   Compare   =CompareText(a1,b1);   break;}  
        case   2:       {   Compare   =CompareText(a2,b2);   break;}  
        case   3:       {   Compare   =CompareText(a3,b3);   break;}  
        default   :   {   Compare   =CompareText(a1,b1);   break;}  
        }  
      }  
  }  
   
  编译,即可实现列标头点击排序功能的效果。  
   
  有兴趣的读者还可以把代码稍微修改,就可以实现单击以降序排列,双击以升序排列。  
  Top

相关问题

  • ListView控件如何排序?
  • ListView控件任何按列排序?
  • 请教ListView控件排序问题!急!
  • listview控件的数值列排序,高分,马上结题!
  • 请问LISTVIEW控件如何按数值型进行排序?
  • 如何对ListView控件上的数据进行排序?
  • ListView(或DBGrid)中,单击列頭可自動排序的控件在哪?
  • listview 排::::::::::::序
  • listview排序
  • listview控件?

关键词

  • c++builder
  • 排序
  • 控件
  • 代码
  • 属性
  • 文件
  • 排列
  • 内容
  • ansipos
  • 子项目

得分解答快速导航

  • 帖主:jxhywdh
  • HUANG_JH

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo