你目前正处于脱机状态,正在等待 Internet 重新连接

如何通过在 Visual Basic.net 中或 Visual Basic 2005 中的列来排序 ListView 控件

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 319399
为这篇文章的一个 Microsoft Visual C#.net 版本,请参阅 319401
为这篇文章的一个 Microsoft Visual Basic 6.0 中版本,请参阅 170884
概要
本分步指南介绍了如何通过在 Visual Basic.net 或 Visual Basic 2005 应用程序中的列来排序 ListView 控件。

当您正在使用 ListView 控件时,要对基于特定列及其内容进行排序。此类功能的示例发生在 Windows 资源管理器中查看您的硬盘上的文件夹的内容时进行编程。在详细信息视图、 Windows 资源管理器将显示有关文件的信息,该文件夹中。例如对于您看到该文件的名称、 文件大小、 文件类型和的文件的修改日期。当您单击一个列标题的时列表被按升序顺序对该列。再次单击相同的列标题列是按降序进行排序。

本文中的示例定义了实现 IComparer 接口的类。此外,此示例使用 CaseInsenstiveComparer 类的 比较 方法来执行实际的比较的项目。请注意此方法的比较不区分大小写 ("apple"被认为是"苹果"相同)。同时,请注意在此示例中列的所有排序"文本"的方式。如果要以不同的方式进行排序 (例如按数字顺序),可以使用您希望使用任何一种方法来排序的替换下面的代码行:
compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)				
back to the top

如何生成示例项目

  1. 创建一个新的 Visual Basic.net 或 Visual Basic 2005 Windows 应用程序项目。 默认情况下创建 Form1。

    注意您必须更改该代码在 Visual Basic 2005 中。默认状态下,Visual Basic 创建项目的两个文件,当您创建一个 Windows 窗体项目时。如果窗体名为 Form1,Form1.vb 和 Form1.Designer.vb,被命名为表示窗体的两个文件。在 Form1.vb 文件中编写代码。Windows 窗体设计器在 Form1.Designer.vb 文件中写入代码。Windows 窗体设计器使用 partial 关键字将 Form1 的实现划分为两个单独的文件。此行为可防止该设计器生成的代码正在与您的代码交错。

    有关新的 Visual Basic 2005 语言增强功能的详细信息,请访问下面的 Microsoft 开发人员网络 (MSDN) 的网站: 有关分部类和 Windows 窗体设计器的详细信息请访问下面的 MSDN 网站:
  2. 向 Form1 中添加 ListView 控件。调整大小,该窗体为有几个英寸宽的几个英寸高。
  3. 将以下代码粘贴到窗体的类:
    Private lvwColumnSorter As ListViewColumnSorter					
  4. 将下面的代码粘贴到窗体的构造函数,InitializeComponent 方法调用后:
    ' Create an instance of a ListView column sorter and assign it ' to the ListView control.lvwColumnSorter = New ListViewColumnSorter()Me.ListView1.ListViewItemSorter = lvwColumnSorter					
  5. 将以下代码粘贴到窗体的 Load 事件:
    Dim columnheader As ColumnHeader    ' Used for creating column headers.Dim listviewitem As ListViewItem    ' Used for creating ListView items.' Make sure that the view is set to show details.ListView1.View = View.Details' Create some ListView items consisting of first and last names.listviewitem = New ListViewItem("Mike")listviewitem.SubItems.Add("Nash")Me.ListView1.Items.Add(listviewitem)listviewitem = New ListViewItem("Kim")listviewitem.SubItems.Add("Abercrombie")Me.ListView1.Items.Add(listviewitem)listviewitem = New ListViewItem("Sunil")listviewitem.SubItems.Add("Koduri")Me.ListView1.Items.Add(listviewitem)listviewitem = New ListViewItem("Birgit")listviewitem.SubItems.Add("Seidl")Me.ListView1.Items.Add(listviewitem)' Create some column headers for the data.columnheader = New ColumnHeader()columnheader.Text = "First Name"Me.ListView1.Columns.Add(columnheader)columnheader = New ColumnHeader()columnheader.Text = "Last Name"Me.ListView1.Columns.Add(columnheader)' Loop through and size each column header to fit the column header text.For Each columnheader In Me.ListView1.Columns    columnheader.Width = -2Next					
  6. 将下面的代码粘贴到 ColumnClick 事件中,为 ListView
    ' Determine if the clicked column is already the column that is ' being sorted.If (e.Column = lvwColumnSorter.SortColumn) Then    ' Reverse the current sort direction for this column.    If (lvwColumnSorter.Order = SortOrder.Ascending) Then        lvwColumnSorter.Order = SortOrder.Descending    Else        lvwColumnSorter.Order = SortOrder.Ascending    End IfElse    ' Set the column number that is to be sorted; default to ascending.    lvwColumnSorter.SortColumn = e.Column    lvwColumnSorter.Order = SortOrder.AscendingEnd If' Perform the sort with these new sort options.Me.ListView1.Sort()					
  7. 项目 菜单上单击添加到项目的新类 添加类
  8. 所有新类中的默认代码替换下面的代码:
    Imports System.CollectionsImports System.Windows.FormsPublic Class ListViewColumnSorter    Implements System.Collections.IComparer    Private ColumnToSort As Integer    Private OrderOfSort As SortOrder    Private ObjectCompare As CaseInsensitiveComparer    Public Sub New()        ' Initialize the column to '0'.        ColumnToSort = 0        ' Initialize the sort order to 'none'.        OrderOfSort = SortOrder.None        ' Initialize the CaseInsensitiveComparer object.        ObjectCompare = New CaseInsensitiveComparer()    End Sub    Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare        Dim compareResult As Integer        Dim listviewX As ListViewItem        Dim listviewY As ListViewItem        ' Cast the objects to be compared to ListViewItem objects.        listviewX = CType(x, ListViewItem)        listviewY = CType(y, ListViewItem)        ' Compare the two items.        compareResult = ObjectCompare.Compare(listviewX.SubItems(ColumnToSort).Text, listviewY.SubItems(ColumnToSort).Text)        ' Calculate the correct return value based on the object         ' comparison.        If (OrderOfSort = SortOrder.Ascending) Then            ' Ascending sort is selected, return typical result of             ' compare operation.            Return compareResult        ElseIf (OrderOfSort = SortOrder.Descending) Then            ' Descending sort is selected, return negative result of             ' compare operation.            Return (-compareResult)        Else            ' Return '0' to indicate that they are equal.            Return 0        End If    End Function    Public Property SortColumn() As Integer        Set(ByVal Value As Integer)            ColumnToSort = Value        End Set        Get            Return ColumnToSort        End Get    End Property    Public Property Order() As SortOrder        Set(ByVal Value As SortOrder)            OrderOfSort = Value        End Set        Get            Return OrderOfSort        End Get    End PropertyEnd Class					
  9. 保存、 生成,并运行示例项目。
  10. 单击不同的列标题,ListView 控件中。单击标题,ListView 控件的内容将根据您单击列的升序顺序排序。再次单击相同的列标题时,该列是按降序进行排序。
back to the top

警告:本文已自动翻译

属性

文章 ID:319399 - 上次审阅时间:05/11/2007 07:08:50 - 修订版本: 3.5

Microsoft Visual Basic 2005, Microsoft Visual Basic .NET 2003 标准版, Microsoft Visual .NET 2002 标准版

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB319399 KbMtzh
反馈