在很多软件中可以看到点了某一列时,自动会出现▲或者▼,请问该功能是不是listview里自带的?
难道是直接在click动作中再轮流改标题并把▲或▼加进去?如果是这样的话,我会!
但是我发觉人家的软件中并不是这样,因为当用鼠标改变列宽时,▲或者▼会自动跟着列走的!所以说不是完全是我的想法?请问高手这个该如何做?
难道是直接在click动作中再轮流改标题并把▲或▼加进去?如果是这样的话,我会!
但是我发觉人家的软件中并不是这样,因为当用鼠标改变列宽时,▲或者▼会自动跟着列走的!所以说不是完全是我的想法?请问高手这个该如何做?
可以在listview的ColumnClick事件中加入以下代码,达到排序目的
If listview.SortOrder = lvwAscending Then
listview.SortOrder = lvwDescending
Else
listview.SortOrder = lvwAscending
End If
listview_ColumnClick事件
If listview.SortOrder = lvwAscending Then
listview.SortOrder = lvwDescending
Else
listview.SortOrder = lvwAscending
End If
index=index-1
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
s_nUpColumn 是一个静态变量,当执行事件连续排序时,s_nUpColumn的值保持不变,这样就能控制排序规则,第一次排序为降序,则第二次排序为升序,这样循环,符合我们的一般思维逻辑,连续排序升、降、升、降......
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
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
我没有这样的ICO图片,麻烦你发一个给我!顺便可上页那段代码的源程序打个包发个给我!谢谢!
[email protected],[email protected]
已把程序和圖片發出﹐請查