I am attempting my first project in VB to create a program that simplifies what I do at work. So far I have everything I need working correctly except my treeview/listview function I am building. What I need is to be able to open a file using specific programs. I have already done this using the "openFileDialog" to populate a full filename into a label which I then run "process.Start" off of.

I would like to make life even easier by adding a treeview explorer to populate a listview containing ONLY certain files with extensions that I actually need. Which I have already done. Right now I have it set to only show .cue, .ddp, and .iso. (Yes I know running the loop multiple times to get multiple extensions is "dirty" but it works)

When I double click a file in listview I want the full file path +name to populate the same label (FilePathLabel) so I can then run the file using my "Process.Start" buttons.

I hope this makes sense. I will paste my code below as well as attach an image of my form. I am very much new to this but I am trying. PS I am getting no credit for this at work besides eliminating about 7 desktop icons and 2-3 open folders on my screen at any given time.

I know the process.start buttons aren't yet linked to the programs yet. I want to get over this last hurdle first before I go any further.Name:  ss.jpg
Views: 4088
Size:  322.7 KB

Code:
Imports System.IO
Imports System.Runtime.InteropServices
Public Class Form1

    Private Structure SHFILEINFO
        Public hIcon As IntPtr            ' : icon
        Public iIcon As Integer           ' : icondex
        Public dwAttributes As Integer    ' : SFGAO_ flags
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> _
        Public szDisplayName As String
        <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=80)> _
        Public szTypeName As String
    End Structure

    Private Declare Auto Function SHGetFileInfo Lib "shell32.dll" _
            (ByVal pszPath As String, _
             ByVal dwFileAttributes As Integer, _
             ByRef psfi As SHFILEINFO, _
             ByVal cbFileInfo As Integer, _
             ByVal uFlags As Integer) As IntPtr

    Private Const SHGFI_ICON = &H100
    Private Const SHGFI_SMALLICON = &H1
    Private Const SHGFI_LARGEICON = &H0    ' Large icon
    Private Const MAX_PATH = 260

    Private Sub AddImages(ByVal strFileName As String)

        Dim shInfo As SHFILEINFO
        shInfo = New SHFILEINFO()
        shInfo.szDisplayName = New String(vbNullChar, MAX_PATH)
        shInfo.szTypeName = New String(vbNullChar, 80)
        Dim hIcon As IntPtr
        hIcon = SHGetFileInfo(strFileName, 0, shInfo, Marshal.SizeOf(shInfo), SHGFI_ICON Or SHGFI_SMALLICON)
        Dim MyIcon As Drawing.Bitmap
        MyIcon = Drawing.Icon.FromHandle(shInfo.hIcon).ToBitmap
        ImageList1.Images.Add(strFileName.ToString(), MyIcon)

    End Sub
    Private Sub AddAllFolders(ByVal TNode As TreeNode, ByVal FolderPath As String)
        Try
            For Each FolderNode As String In Directory.GetDirectories(FolderPath)
                Dim SubFolderNode As TreeNode = TNode.Nodes.Add(FolderNode.Substring(FolderNode.LastIndexOf("\"c) + 1))

                SubFolderNode.Tag = FolderNode

                SubFolderNode.Nodes.Add("Loading...")

            Next
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

    End Sub

    Private Sub Treeview1_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
        Dim FileExtension As String
        Dim SubItemIndex As Integer
        Dim DateMod As String



        ListView1.Items.Clear()

        If TreeView1.SelectedNode.Nodes.Count = 1 AndAlso TreeView1.SelectedNode.Nodes(0).Text = "Loading..." Then

            TreeView1.SelectedNode.Nodes.Clear()

            AddAllFolders(TreeView1.SelectedNode, CStr(TreeView1.SelectedNode.Tag))

        End If
    
        Dim folder As String = CStr(TreeView1.SelectedNode.Tag)

        If Not folder Is Nothing AndAlso IO.Directory.Exists(folder) Then


            Try

                For Each file As String In IO.Directory.GetFiles(folder, "*.cue*")
                    FileExtension = IO.Path.GetExtension(file)
                    DateMod = IO.File.GetLastWriteTime(file).ToString()


                    AddImages(file)

                    ListView1.Items.Add(file.Substring(file.LastIndexOf("\"c) + 1), file.ToString())
                    ListView1.Items(SubItemIndex).SubItems.Add(FileExtension.ToString() & " File")
                    ListView1.Items(SubItemIndex).SubItems.Add(DateMod.ToString())
                    SubItemIndex += 1

                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If

        If Not folder Is Nothing AndAlso IO.Directory.Exists(folder) Then


            Try

                For Each file As String In IO.Directory.GetFiles(folder, "*.ddp*")
                    FileExtension = IO.Path.GetExtension(file)
                    DateMod = IO.File.GetLastWriteTime(file).ToString()


                    AddImages(file)

                    ListView1.Items.Add(file.Substring(file.LastIndexOf("\"c) + 1), file.ToString())
                    ListView1.Items(SubItemIndex).SubItems.Add(FileExtension.ToString() & " File")
                    ListView1.Items(SubItemIndex).SubItems.Add(DateMod.ToString())
                    SubItemIndex += 1

                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If
        If Not folder Is Nothing AndAlso IO.Directory.Exists(folder) Then


            Try

                For Each file As String In IO.Directory.GetFiles(folder, "*.iso*")
                    FileExtension = IO.Path.GetExtension(file)
                    DateMod = IO.File.GetLastWriteTime(file).ToString()


                    AddImages(file)

                    ListView1.Items.Add(file.Substring(file.LastIndexOf("\"c) + 1), file.ToString())
                    ListView1.Items(SubItemIndex).SubItems.Add(FileExtension.ToString() & " File")
                    ListView1.Items(SubItemIndex).SubItems.Add(DateMod.ToString())
                    SubItemIndex += 1

                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If

    End Sub

    Private Sub Treeview1_BeforeExpand(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView1.BeforeExpand

        If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = "Loading..." Then

            e.Node.Nodes.Clear()
            AddAllFolders(e.Node, CStr(e.Node.Tag))

        End If

    End Sub

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        TreeView1.Sort()
        Dim Tnode As TreeNode = TreeView1.Nodes.Add("(Drive W:)")

        AddAllFolders(Tnode, "C:\")

        ListView1.View = View.Details
        ' Add a column with width 80 and left alignment
        ListView1.Columns.Add("File Name", 150, HorizontalAlignment.Left)
        ListView1.Columns.Add("File Type", 80, HorizontalAlignment.Left)
        ListView1.Columns.Add("Date Modified", 150, HorizontalAlignment.Left)


        TreeView2.Sort()
        Dim Tnode1 As TreeNode = TreeView2.Nodes.Add("(Drive V:)")
        AddAllFolders(Tnode1, "C:\")

        ListView1.View = View.Details
        ' Add a column with width 80 and left alignment

    End Sub

    Private Sub TabPage1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabPage1.Click

    End Sub

    Private Sub TreeView2_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeView2.AfterSelect
        Dim FileExtension As String
        Dim SubItemIndex As Integer
        Dim DateMod As String



        ListView1.Items.Clear()

        If TreeView2.SelectedNode.Nodes.Count = 1 AndAlso TreeView2.SelectedNode.Nodes(0).Text = "Loading..." Then

            TreeView2.SelectedNode.Nodes.Clear()

            AddAllFolders(TreeView2.SelectedNode, CStr(TreeView2.SelectedNode.Tag))

        End If
        Dim folder As String = CStr(TreeView2.SelectedNode.Tag)

        If Not folder Is Nothing AndAlso IO.Directory.Exists(folder) Then


            Try

                For Each file As String In IO.Directory.GetFiles(folder, "*.cue*")
                    FileExtension = IO.Path.GetExtension(file)
                    DateMod = IO.File.GetLastWriteTime(file).ToString()


                    AddImages(file)

                    ListView1.Items.Add(file.Substring(file.LastIndexOf("\"c) + 1), file.ToString())
                    ListView1.Items(SubItemIndex).SubItems.Add(FileExtension.ToString() & " File")
                    ListView1.Items(SubItemIndex).SubItems.Add(DateMod.ToString())
                    SubItemIndex += 1

                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If
        If Not folder Is Nothing AndAlso IO.Directory.Exists(folder) Then


            Try

                For Each file As String In IO.Directory.GetFiles(folder, "*.ddp*")
                    FileExtension = IO.Path.GetExtension(file)
                    DateMod = IO.File.GetLastWriteTime(file).ToString()


                    AddImages(file)

                    ListView1.Items.Add(file.Substring(file.LastIndexOf("\"c) + 1), file.ToString())
                    ListView1.Items(SubItemIndex).SubItems.Add(FileExtension.ToString() & " File")
                    ListView1.Items(SubItemIndex).SubItems.Add(DateMod.ToString())
                    SubItemIndex += 1

                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If
        If Not folder Is Nothing AndAlso IO.Directory.Exists(folder) Then


            Try

                For Each file As String In IO.Directory.GetFiles(folder, "*.iso*")
                    FileExtension = IO.Path.GetExtension(file)
                    DateMod = IO.File.GetLastWriteTime(file).ToString()


                    AddImages(file)

                    ListView1.Items.Add(file.Substring(file.LastIndexOf("\"c) + 1), file.ToString())
                    ListView1.Items(SubItemIndex).SubItems.Add(FileExtension.ToString() & " File")
                    ListView1.Items(SubItemIndex).SubItems.Add(DateMod.ToString())
                    SubItemIndex += 1

                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End If
    End Sub
    Private Sub Treeview2_BeforeExpand(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeView2.BeforeExpand

        If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = "Loading..." Then

            e.Node.Nodes.Clear()
            AddAllFolders(e.Node, CStr(e.Node.Tag))

        End If

    End Sub
   

    Private Sub TreeView2_AfterSelect_1(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs)

    End Sub

    Private Sub ListView1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListView1.SelectedIndexChanged






    End Sub
    Private Sub ListView1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListView1.DoubleClick





       
    End Sub

    Private Sub TabPage2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TabPage2.Click

    End Sub

    Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click

    End Sub


    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    End Sub

    Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter

    End Sub

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub SearchBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SearchBtn.Click

        OpenFileDialog.ShowDialog()

        FilePathLabel.Text = OpenFileDialog.FileName

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Process.Start("", FilePathLabel.Text)

    End Sub
End Class