在很多软件中可以看到点了某一列时,自动会出现▲或者▼,请问该功能是不是listview里自带的?
难道是直接在click动作中再轮流改标题并把▲或▼加进去?如果是这样的话,我会!
但是我发觉人家的软件中并不是这样,因为当用鼠标改变列宽时,▲或者▼会自动跟着列走的!所以说不是完全是我的想法?请问高手这个该如何做?

解决方案 »

  1.   

    vb6的listview的列首没有▲或者▼,但有排序功能,
    可以在listview的ColumnClick事件中加入以下代码,达到排序目的
    If listview.SortOrder = lvwAscending Then
        listview.SortOrder = lvwDescending
    Else
        listview.SortOrder = lvwAscending
    End If
      

  2.   

    vb6中的listview没有▲或者▼,要排序可以通过以下代码实现
    listview_ColumnClick事件
    If listview.SortOrder = lvwAscending Then
        listview.SortOrder = lvwDescending
    Else
        listview.SortOrder = lvwAscending
    End If
      

  3.   

    index=index+1
    index=index-1
      

  4.   

    看看这段代码
    lvCSS 为ListView控件
    Private Sub lvCSS_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
    Static s_nUpColumn As Integer
    lvCSS.SortKey = ColumnHeader.Index - 1
    If s_nUpColumn = ColumnHeader.Index - 1 Then
        lvCSS.SortOrder = lvwDescending
        s_nUpColumn = ColumnHeader.Index
    Else
        lvCSS.SortOrder = lvwAscending
        s_nUpColumn = ColumnHeader.Index - 1
    End If
    lvCSS.Sorted = True
    End Sub
      

  5.   

    不知道busisoft网友所说的代码里的s_nUpColumn是什么变量,s_nUpColumn = ColumnHeader.Index与s_nUpColumn = ColumnHeader.Index - 1有什么作用?
      

  6.   

    To nofound007(地狱天使):
    s_nUpColumn 是一个静态变量,当执行事件连续排序时,s_nUpColumn的值保持不变,这样就能控制排序规则,第一次排序为降序,则第二次排序为升序,这样循环,符合我们的一般思维逻辑,连续排序升、降、升、降......
      

  7.   

    看看我写的一段代码,能实现▲或者▼符号的出现并按标准执行,但是并不是像一些软件里的那个效果,也就是是说与那个效果还差一点,不知那位高手帮忙改一改!
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As MSComctlLib.ColumnHeader)
        Static nowSortOrder As Boolean
        Static OldIndex As Integer
        Static OldColumnheader As String
        Dim nowColumnHeader As String
        On Error Resume Next
        
        If Right(OldColumnheader, 2) = " ▲" Or Right(OldColumnheader, 2) = " ▼" Then
            ListView1.ColumnHeaders(OldIndex).Text = Mid(OldColumnheader, 1, Len(OldColumnheader) - 2)  '还原标题
        End If
        
        nowColumnHeader = ColumnHeader
        If Right(nowColumnHeader, 2) = " ▲" Or Right(nowColumnHeader, 2) = " ▼" Then
            nowColumnHeader = Mid(nowColumnHeader, 1, Len(nowColumnHeader) - 2) '还原标题
        End If
       
        If nowSortOrder Then
            ListView1.SortOrder = lvwDescending '降序
            ListView1.ColumnHeaders(ColumnHeader.Index).Text = nowColumnHeader & " ▼"
        Else
            ListView1.SortOrder = lvwAscending '升序
            ListView1.ColumnHeaders(ColumnHeader.Index).Text = nowColumnHeader & " ▲"
        End If
        
        nowSortOrder = Not nowSortOrder
        ListView1.SortKey = ColumnHeader.Index - 1
        ' 对列表进行排序
        ListView1.Sorted = True
        
        
        OldIndex = ColumnHeader.Index
        OldColumnheader = ColumnHeaderEnd Sub
      

  8.   

    我自己已经解决了,可以使用flexcell使用,这个控件是自带这个功能的!只是不知道谁有这个控件的注册码?
      

  9.   

    代碼﹕
    Option ExplicitPrivate Const LVM_FIRST = &H1000
    Private Const LVM_GETHEADER = (LVM_FIRST + 31)Private Const HDI_BITMAP = &H10
    Private Const HDI_IMAGE = &H20
    Private Const HDI_FORMAT = &H4
    Private Const HDI_TEXT = &H2Private Const HDF_BITMAP_ON_RIGHT = &H1000
    Private Const HDF_BITMAP = &H2000
    Private Const HDF_IMAGE = &H800
    Private Const HDF_STRING = &H4000Private Const HDM_FIRST = &H1200
    Private Const HDM_SETITEM = (HDM_FIRST + 4)
    Private Const HDM_SETIMAGELIST = (HDM_FIRST + 8)
    Private Const HDM_GETIMAGELIST = (HDM_FIRST + 9)Private Type HD_ITEM
       mask As Long
       cxy As Long
       pszText As String
       hbm As Long
       cchTextMax As Long
       fmt As Long
       lParam As Long
       iImage As Long
       iOrder As Long
    End TypePrivate Declare Function SendMessage Lib "user32" _
       Alias "SendMessageA" _
      (ByVal hwnd As Long, _
       ByVal wMsg As Long, _
       ByVal wParam As Long, _
       lParam As Any) As Long
    Private Sub Form_Load()   Dim i As Integer
       Dim itmX As ListItem
       
      'Create and populate the listview
       With ListView1
          
          .SmallIcons = ImageList1
          
          For i = 1 To 3
             .ColumnHeaders.Add , "x" & i, "Column " & i 
             .ColumnHeaders.Item(i).Width = 1520
          Next i
          
          For i = 1 To 9
             Set itmX = .ListItems.Add(, "key" & i, "Item " & i)
             itmX.SubItems(1) = "Subitem " & i
             itmX.SubItems(2) = "Subitem " & i
          Next i
          
       End With
       
      'ShowHeaderIcon colNo, imgIndex, showFlag
       ShowHeaderIcon 0, 0, True
       
    End Sub
    Private Sub Command1_Click()   Unload Me
          
    End Sub
    Public Sub ShowHeaderIcon(colNo As Long, _
                              imgIconNo As Long, _
                              showImage As Long)   Dim hHeader As Long
       Dim HD As HD_ITEM
       
      'get a handle to the listview header component
       hHeader = SendMessage(ListView1.hwnd, LVM_GETHEADER, 0, ByVal 0)
       
      'set up the required structure members
       With HD
          .mask = HDI_IMAGE Or HDI_FORMAT
          .pszText = ListView1.ColumnHeaders(colNo + 1).Text
          
           If showImage Then
             .fmt = HDF_STRING Or HDF_IMAGE Or HDF_BITMAP_ON_RIGHT
             .iImage = imgIconNo
           Else
             .fmt = HDF_STRING
          End If
       End With
       
      'modify the header
       Call SendMessage(hHeader, HDM_SETITEM, colNo, HD)
       
    End Sub
    Private Sub ListView1_ColumnClick(ByVal ColumnHeader As ComctlLib.ColumnHeader)   Dim i As Long
       Static sOrder
       
       sOrder = Not sOrder
       
      'Use default sorting to sort the items in the list
       ListView1.SortKey = ColumnHeader.Index - 1
       ListView1.SortOrder = Abs(sOrder)
       ListView1.Sorted = True
       
      'clear the image from the headers not
      'currently selected, and update the
      'header clicked
       For i = 0 To 2
          
         'if this is the index of the header clicked
          If i = ListView1.SortKey Then
          
               'ShowHeaderIcon colNo, imgIndex, showFlag
                ShowHeaderIcon ListView1.SortKey, _
                               ListView1.SortOrder, _
                               True
                               
          Else: ShowHeaderIcon i, 0, False
          End If
       
       Next
       
    End Sub
      

  10.   

    另外你所需要地▲▼是兩個ico圖片﹐我以前放在一個站上﹐后來沒有找到了﹐你可以問問其他人是否有﹐如果還沒有﹐留個mail﹐星期一發給你﹐呵呵~~
      

  11.   

    非常感谢!
    我没有这样的ICO图片,麻烦你发一个给我!顺便可上页那段代码的源程序打个包发个给我!谢谢!
      

  12.   

    nofound007,StarRib兩位請分別email:
    [email protected],[email protected]
    已把程序和圖片發出﹐請查