ListView 控件以 ListItem 对象的形式显示数据。每个 ListItem 对象都可有一个可选的图标与其标签相关联。该控件擅长于表示数据的子集(比如数据库的成员)或分布式对象(比如文档模板)。
ListView 控件可以以四种不同的视图模式显示数据(如以下所示参数)。如何对控件编程取决于想让用户看到(或选择)何种视图。
这些视图每种都有其优于其它视图的地方。下表中列出了一些:
| 视图 | 优点 |
| 图标 | 可用鼠标操作,使用户能够拖放该对象,并重新排列它们。 |
| 小图标 | 同时能够显示更多的 ListItem。与图标视图相似,可由用户重新排列对象。 |
| 列表 | 提供排序的 ListItems 对象视图。 |
| 报表 | 提供排序的视图,通过 SubItems 能够显示更多的信息。 |
图标视图的 ListView

图 2.8 小图标视图的 ListView

图 2.9 列表视图的 ListView

图 2.10 报表视图的 ListView

要改变视图,可以使用 View 属性。下面的代码将 View 属性设置为报表视图 (3),代码中使用了内部常数 lvwReport:
'该控件的名称为“ListView1”ListView1.View = lvwReport
用 View 属性,可使最终用户动态地改变视图。在窗体的 Load 事件中,ComboBox 被View属性所选择的视图来充填View所选择:
Private Sub Form_Load() '充填到ComboBox控件。'ComboBox控件的名称是“cmbChooseView”。With cmbChooseView. AddItem "Icon" ' 0. AddItem "Small Icon" ' 1. AddItem "List" ' 2. AddItem "Report" ' 3 End WithEnd Sub
在 ComboBox 控件的 Click 事件中,该控件的视图可被重新设置,如下所示:
Private Sub cmbChooseView_Click() 'ListView控件的名称是“lvwDB”lvwDB.View = cmbChooseView.ListIndexEnd Sub
ListItem 对象由标签(Text 属性)和由 ImageList 控件提供的可选图象构成。然而,ListView 控件和其它控件不同,可以具有两个 ImageList 控件,它们分别有 Icons 和 SmallIcons 属性设置。是否使用一个或两个 ImageList 控件取决于想用的视图,它由 View 属性决定。
在列表、小图标和报表视图中,可用小图标代表 ListItem 对象。在这三种视图下,都由一个 ImageList 控件(由 SmallIcons 属性指定)提供图象。在设计时或运行时,将 SmallIcons 属性设置为 ImageList 控件即可提供这些图象。在设计时,用 ListView 控件的“属性页”对话框,可将 SmallIcons 设置为 ImageList。在运行时,可使用下面的代码:
ListView1.SmallIcons = imlSmallIcons
但是在图标视图下,该控件使用第二个 ImageList 控件提供一套不同的图象。在设计时用“属性页”对话框,可将 Icons 属性设置为这第二个 ImageList 控件,或在运行时使用下面的代码:
ListView1.Icons = imlIcons
注意 所用图标的大小由 ImageList 控件决定。可用的大小为 16 x 16、32 x 32、48 x 48 和自定义大小。要得到有关 ImageList 控件的详细说明,请参阅 “ImageList 控件”。
如果计划使用多种视图,并且显示图象,就必须为每个 ListItem 对象设置 SmallIcon 和 Icon 属性。下面的代码首先声明了 ListItem 类型的对象变量,然后将该对象变量设置为用 Add 方法添加到集合的一个 ListItem 对象。最后用对象变量引用设置 SmallIcon 和 Icon 图象:
Dim itmX as ListItem Set itmX = ListView1.ListItems.Add() '假设在设置给SmallIcons属性的ImageList中'存在一幅名为“smallBook”的图象。itmX.SmallIcon = "smallBook"'假设在设置给Icons属性的ImageList中'存在一幅名为“BigBook”的图象。itmX.Icon = "BigBook"
将图象设置到 SmallIcon 和 Icon 属性之后,在用 View 属性切换视图时,就能够自动显示正确的图象了。
报表视图的一个特色是它的 ColumnHeader 对象。ListView 控件在 ColumnHeaders 集合中包含了一个 ColumnHeader 对象的集合。
ColumnHeader

ColumnHeader 对象有 Text 属性,该属性在该控件处于报表视图时显示文本。还可设置每个 ColumnHeader 的 Width 属性,以及 Alignment 属性(它设置了 ColumnHeader 对象中显示文本的对齐方式)。在下面的示例代码中创建了四个 ColumnHeader 对象,并设置了它们的 Text 和 Width 属性:
Dim colX As ColumnHeader '声明变量。Dim intX as Integer '计数器变量。For intX = 1 to 4Set colX = ListView1.ColumnHeaders.Add()colX.Text = "Field " & intXcolX.Width = ListView1.Width / 4Next intX
请注意在除报表视图以外的其它视图中,ListItem 对象只显示一个标签,即 Text 属性。但在报表视图下,每个 ListItem 对象可以有多个其它的文本项。例如,除了书名《Hitchhiker's Guide to Visual Basic...》以外,还有一个作者 ("Vaughn, William R.")、年代 (1996),以及 ISBN 号与其相关。所有这些文本项都是 ListSubItems 集合的成员。为创建 ListSubItem 对象,对 ListSubItems 集合使用 Add 方法这样,要设置 ListItem 对象的作者、年代和 ISBN 号,代码可能应如下面所示那样:
'该控件的名称为lvwAuthors。lvwAuthor.ListItems(23).ListSubItems.Add , , _"Hitchhiker's Guide to Visual Basic and SQL Server"lvwAuthor.ListItems(23).ListSubItems.Add , , _"Vaughn, William R."lvwAuthor.ListItems(23).ListSubItems.Add , , "1996"lvwAuthor.ListItems(23).ListSubItems.Add , , "1-55615-906-4"
注意 Visual Basic versions 4.0 和 5.0 中使用的 ListItems 字符串数组已经被ListSubItems 集合取代了。
ListSubItem 是否存在,以及其数目都取决于 ColumnHeader 对象是否存在、及其数目。也就是说,如果没有 ColumnHeader 对象,就不能创建任何 ListSubItem 对象。进一步说,ColumnHeader 对象的数目,决定了可为 ListItem 对象设置的 ListSubItem 对象的数目。ListSubItem 的数目总是比 ColumnHeader 对象的数目少。这是因为第一个 ColumnHeader 对象总是与 ListItem 对象的 Text 属性相关联,以下所示:
第一个 ColumnHeader 和 SubItems

这样如果上例中 ColumnHeader 对象的数目为 4,则可设置的 ListSubItems 集合的至多为 3。