VB.NET +将文件夹添加到treeview,将文件添加到listview

时间:2012-10-04 07:07:06

标签: vb.net collections directory

我想创建一个简单的打印机管理器,以便在我们的终端服务器环境中使用。由于GPO的限制,我可以使用的内置功能有限。所以我决定尝试编写自己的简单GUI来做到这一点。

现在,打印机分布在一个文件夹中,子文件夹对它们进行分类。在每个文件夹中都有.lnk文件到打印服务器上的实际打印机。

我想要做的是根据树视图中单击的项目,使用文件夹和listview中的打印机填充树视图。

我已经设法搜索目录并搜索我点击的每个项目的文件。但我意识到,为什么不在表单启动过程中使用集合或类似的东西呢?这样,它会更快。因为现在,每次单击树视图中的项目时都会有一点延迟。因为它每次都会扫描文件。

如何将相同内容添加到集合中并使用它?

这是我目前的代码:

Public Sub populateTreeView(ByVal strPath As String)

        Dim di As New IO.DirectoryInfo(strPath)
        Dim diar1 As IO.DirectoryInfo() = di.GetDirectories()
        Dim dra As IO.DirectoryInfo

        For Each dra In diar1
            ImageList1.Images.Add(GetSmallIcon(dra.FullName))

            TreeView1.Nodes.Add("", dra.Name, nIndex)
            nIndex = nIndex + 1
        Next
    End Sub

    Private Sub TreeView1_AfterSelect(sender As Object, e As TreeViewEventArgs) Handles TreeView1.AfterSelect
        ListView1.Clear()
        nIndex = 0

        Dim di As New IO.DirectoryInfo(strIniSettings & "\" & TreeView1.SelectedNode.Text)
        Dim diar1 As IO.FileInfo() = di.GetFiles()
        Dim dra As IO.FileInfo

        For Each dra In diar1
            Dim strName As String
            strName = Replace(dra.Name, ".lnk", "")
            ImageList2.Images.Add(GetLargeIcon(dra.FullName))

            ListView1.Items.Add("", strName, nIndex)
            nIndex = nIndex + 1
        Next
    End Sub

注意图像列表?我也得到每个项目的图标。

1 个答案:

答案 0 :(得分:1)

由于您的数据并不复杂,因此简单的LookUp可能是适合您的集合(或仅仅是简单的词典)。

只需查询打印机一次,并将其存储在成员变量中,或者只使用Tag的{​​{1}}属性,以便存储文件名。

在下面的示例中,我使用简单的Linq查询来创建TreeNode,其中LookUp是目录名称(您也可以只使用目录的完整路径),以及items是文件名。

然后,您可以按给定的Key(目录名称)查询集合,或使用Key属性。


LINQPad示例:

Tag