簡體   English   中英

列表視圖排序箭頭vb.net

[英]List view sort arrow vb.net

我正在嘗試在列表視圖列標題上繪制排序箭頭以及默認的視覺樣式

到目前為止,我已經知道了

Private Sub List_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles List.DrawColumnHeader

    e.DrawDefault = True
    If e.ColumnIndex = selectedIndex Then
        e.Graphics.DrawImage(ImageList1.Images(1), CType(e.Bounds.Left + e.Bounds.Width / 2, Single) - 5, -2)
    End If

End Sub

但是視覺風格是以某種方式繪制在箭頭上的,所以我認為我可以嘗試這樣做:

Private Sub List_DrawColumnHeader(sender As Object, e As DrawListViewColumnHeaderEventArgs) Handles List.DrawColumnHeader

    e.DrawDefault = True
    If lastDrawn.ColumnIndex = selectedIndex Then
        e.Graphics.DrawImage(ImageList1.Images(1), CType(lastDrawn.Bounds.Left + lastDrawn.Bounds.Width / 2, Single) - 5, -2)
    End If

    lastDrawn=e

End Sub

當下一個對應的列被繪制時它會繪制箭頭,但是我無法為最后一列繪制它

截圖: 在此處輸入圖片說明

在此處輸入圖片說明

在此處輸入圖片說明

為了使用.NET內置解決方案顯示列表視圖列標題的自定義圖標,您需要:

  • 創建一個ImageList
  • 添加三個圖像(向上/向下箭頭和空白)
  • 將圖像列表綁定到ListView控件
  • 綁定到ListView控件的ColumnClick事件
  • 在對列進行排序時,根據排序方向設置當前已排序列的ImageKey屬性

該示例類(一種簡單的形式)顯示了如何正確地設置圖像,而不使用ListView標題列的自定義繪圖。

它沒有實現任何形式! (此MSDN文章中顯示了如何實現ListViewSorter)

在對列進行排序之后,您需要實現一個自定義ListView-Sorter類並從中檢索圖像或圖像鍵。

Public Class SimpleForm
    Inherits Form

    Private sortItems = New ImageList()
    Dim lv As ListView = New ListView()
    Dim so = System.Windows.Forms.SortOrder.Ascending

    Public Sub New()
        ' create columns, items and ListView
        Dim columns = New List(Of ColumnHeader)
        Dim c1 = New ColumnHeader()
        c1.Name = "c1"
        c1.Text = "Name"
        Dim c2 = New ColumnHeader()
        c2.Name = "c2"
        c2.Text = "Type"
        columns.Add(c1)
        columns.Add(c2)

        Dim items = New List(Of ListViewItem)
        Dim i1 = New ListViewItem("Terminator")
        i1.SubItems.Add("T1000")
        Dim i2 = New ListViewItem("Terminator")
        i2.SubItems.Add("T10")
        Dim i3 = New ListViewItem("J.C.")
        i3.SubItems.Add("Human")
        items.Add(i1)
        items.Add(i2)
        items.Add(i3)
        ' init and bind column click
        lv.Columns.AddRange(columns.ToArray())
        lv.Items.AddRange(items.ToArray())
        lv.SmallImageList = sortItems
        lv.View = View.Details
        lv.Dock = DockStyle.Fill
        Controls.Add(lv)

        AddHandler lv.ColumnClick, AddressOf clickEventHandler
        ' init images list 
        sortItems.TransparentColor = System.Drawing.Color.Transparent
        sortItems.Images.Add("up", Image.FromFile("d:\temp\32\arrow_up.gif"))
        sortItems.Images.Add("down", Image.FromFile("d:\temp\32\arrow_down.gif"))
        sortItems.Images.Add("empty", Image.FromFile("d:\temp\32\check.gif"))

    End Sub

    Private Sub clickEventHandler(ByVal o As Object, ByVal e As ColumnClickEventArgs)
        ' Implement a custom ListViewItemSorter and fetch the icon from it!
        ' Set the ListViewItemSorter property to a new ListViewItemComparer  
        ' object. Setting this property immediately sorts the  
        ' ListView using the ListViewItemComparer object. 
        ' THIS CODE SHOWS ONLY HOW TO SET THE SORT ICON!
        For i As Integer = 0 To lv.Columns.Count - 1
            If (i = e.Column) Then
                Select Case (so)
                    Case System.Windows.Forms.SortOrder.Ascending
                        lv.Columns(i).ImageKey = "up"
                        so = System.Windows.Forms.SortOrder.Descending
                    Case System.Windows.Forms.SortOrder.Descending
                        lv.Columns(i).ImageKey = "down"
                        so = System.Windows.Forms.SortOrder.Ascending
                    Case Else
                        lv.Columns(i).ImageKey = "empty"
                        so = System.Windows.Forms.SortOrder.None
                End Select
            Else
                lv.Columns(i).ImageKey = "empty"
            End If
        Next i
    End Sub

End Class

輸出看起來像這樣:

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM