上一篇文章我们了解了 ListView 控件的使用(相关文章:vb.net入门——ListView 控件的使用),
这里我们就来用ListView 控件模仿制作一个Windows操作系统中“我的电脑”中显示的磁盘驱动器信息列表,以加深对 ListView 控件的印象。
一、技术准备
1、获取驱动器列表
在以前vb6中,有一个DriveListBox 控件可以获取系统驱动器列表,但是在vb.net中不存在了这个控件,我们可以使用Director 类来获得驱动器列表,该类在System.IO 命名空间下。
2、获取驱动器相关信息
Director 类只能获取驱动器的列表,我们还需要获得驱动器中的卷标,文件类型,磁盘大小,可用空间等详细信息,这些信息可以通过FSO(文件系统对象模型)实现。
FSO对象模型包含在SCRIPTING类型库(SCRRUN.DLL)中。调用方法如下:
在项目菜单中选择引用,在COM中选择Microsoft Scripting Runtime,如下图所示:

然后在代码最顶端添加
Imports Scripting
3、了解ListVIew 控件
需要了解 ListView 控件的基本使用,相关文章可以参看:vb.net入门——ListView 控件的使用,本文需要涉及到ListView 控件的View 属性的四个枚举值切换,以及列标题的添加、项的添加。
二、布局窗体控件
首先我们创建一个空白的Windows项目,然后在Form1窗体上拖放如下控件:
1、拖放两个ImageList 控件:分别为这两个控件添加如下图二所示的图标(按文件顺序添加,图标文件单击这里下载): 图二:程序要用到的图标
ImageList1 组件的 ImageSize属性(图标大小)设置为 32×32,ImageList2 组件的 ImageSize属性设置为 16×16,如下图三所示:
 图三:设置图标显示的大小
2、拖放一个 ListView 控件到窗体中,把ListView 控件的Dock 属性设置为 Fill。
3、拖放一个 MainMenu 组件到窗体中,然后为 MainMenu 组件添加如下图四所示的菜单项:

4、拖放一个 ToolTip 控件到窗体上,该控件用于当选择一个盘符时以工具提示的方式显示驱动器的详细信息。
窗体布局完毕后,下面就进入代码编写的步骤了。
三、代码编写
1、首先在Form1窗体代码中添加命名空间的引用:
Imports System.IO
Imports Scripting
然后定义一个全局变量
Public StrDrive() As String '驱动器数组
2、为菜单的四个子菜单编写代码,代码如下:
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
ListView1.View = View.LargeIcon
End Sub
Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
ListView1.View = View.SmallIcon
End Sub
Private Sub MenuItem4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem4.Click
ListView1.View = View.List
End Sub
Private Sub MenuItem5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem5.Click
If ListView1.Items.Count > 0 Then
ListView1.View = View.Details
If ListView1.Columns.Count = 0 Then
'如果不在这里添加列标头,则View=List的时候无法显示
'为控件添加列标头
ListView1.Columns.Add("名称", -1, HorizontalAlignment.Center)
ListView1.Columns.Add("类型", -1, HorizontalAlignment.Center)
ListView1.Columns.Add("大小", -1, HorizontalAlignment.Center)
ListView1.Columns.Add("可用空间", -1, HorizontalAlignment.Center)
'下面代码为自动调整ListView1列的宽度
Dim i As Integer
For i = 0 To 3
ListView1.Columns(i).Width = -1
Next
End If
End If
End Sub
3、创建一个载入驱动器信息的过程,代码如下所示:
Sub LoadDriveInfo()
ListView1.Items.Clear()
ListView1.Columns.Clear()
ListView1.View = View.LargeIcon
ListView1.LargeImageList = Me.ImageList1
ListView1.SmallImageList = Me.ImageList2
ListView1.FullRowSelect = False
ListView1.GridLines = False
Dim drvDisk As Drive
Dim i As Integer
'创建FileSystemObject对象
Dim fso As New Scripting.FileSystemObject
'DriveLetter返回某个物理本地驱动器或网络共享的驱动器字母。
'VolumeName返回某个启动器的卷标
Dim iDriveType As Integer '驱动器类型
Dim strVolumeName As String '驱动器卷标
Dim strDriveLetter As String '驱动器字母
Dim iDriveSpace As Double '驱动器空间
Dim iDriveFreeSpace As Double '驱动器可用空间
'取得驱动器数组
StrDrive = System.IO.Directory.GetLogicalDrives()
For i = 0 To StrDrive.Length - 1
'取得驱动器
drvDisk = fso.GetDrive(StrDrive(i))
'取得驱动器类型,判断驱动器类型,决定所所以用的图标
iDriveType = drvDisk.DriveType
'取得驱动器的卷标
strVolumeName = drvDisk.VolumeName
Dim intImage As Integer = 0 '所显示的图标索引
Select Case iDriveType
Case 0 '"Unknown",未知
intImage = 0
If strVolumeName = "" Then
strVolumeName = "未知磁盘"
End If
Case 1 '"Removable",可移动存储,包括软盘驱动器和其他多种存储设备
intImage = 1
If strVolumeName = "" Then
strVolumeName = "可移动磁盘"
End If
Case 2 '"Fixed",固定(不可移动)媒体驱动器,包括所有硬盘驱动器(包括可移动的硬盘驱动器)。
intImage = 0
If strVolumeName = "" Then
strVolumeName = "本地磁盘"
End If
Case 3 '"Network",网络硬盘
intImage = 0
If strVolumeName = "" Then
strVolumeName = "网络磁盘"
End If
Case 4 '"CD-ROM",光驱
intImage = 2
If strVolumeName = "" Then
strVolumeName = "光驱"
End If
Case 5 '"RAM Disk"
intImage = 0
If strVolumeName = "" Then
strVolumeName = "RAM Disk"
End If
End Select
'取得代表驱动器的字母
strDriveLetter = drvDisk.DriveLetter
'取得驱动器的大小
iDriveSpace = Math.Round(((CDbl(drvDisk.TotalSize) / 1024) / 1024) / 1024, 2)
'取得驱动器可用空间
iDriveFreeSpace = Math.Round(((CDbl(drvDisk.FreeSpace) / 1024) / 1024) / 1024, 2)
'以下代码把驱动器的信息添加到ListView控件中
Dim mListItem As ListViewItem
Dim str As String
str = strVolumeName & "(" & strDriveLetter & ":)"
mListItem = ListView1.Items.Add(str, intImage)
mListItem.SubItems.Add(drvDisk.DriveType.ToString)
mListItem.SubItems.Add(iDriveSpace.ToString & "GB")
mListItem.SubItems.Add(iDriveFreeSpace.ToString & "GB")
Next
End Sub
然后把 LoadDriveInfo() 过程添加到窗体的New()过程中如下图所示: 图五:把LoadDriveInfo() 过程添加到窗体的New()中
4、最后为ListView1控件的Click事件添加代码,用于当选中一个驱动器的时候显示驱动器的详细信息,代码如下所示:
Private Sub ListView1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.Click
If ListView1.SelectedItems.Count = 1 Then
Dim fso As New Scripting.FileSystemObject
Dim drvDisk As Drive = fso.GetDrive(StrDrive(ListView1.SelectedIndices(0)))
Dim iDriveType As String = drvDisk.DriveType.ToString
Dim iDriveSpace As Double = Math.Round(((CDbl(drvDisk.FreeSpace) / 1024) / 1024) / 1024, 2)
Dim ToolTipString As String
ToolTipString = "驱动器类型:" & iDriveType.ToString & vbCr
ToolTipString = ToolTipString & "文件系统:" & drvDisk.FileSystem & vbCr
ToolTipString = ToolTipString & "可用空间:" & iDriveSpace.ToString & "G"
ToolTip1.SetToolTip(ListView1, ToolTipString)
End If
End Sub
现在我们添加完代码后,运行,如下图六所示:

然后我们可以通过“查看”菜单中的四个子菜单来切换视图模式,我们切换到“详细资料”模式: 到了这里,我们用ListView 控件来显示系统驱动器列表的程序就完成了,我们还可以在这个代码的基础上,增加更多的驱动器详细资料,真正做成模仿“我的电脑”中的显示样式 |