Solved

How do I remove nodes from a treeview

Posted on 2009-06-27
3
417 Views
Last Modified: 2013-11-27
I am using the attached code snippet to remove nodes from a treeview. The tree contains a scan of a PC showing all folders containing exe files on the machine. It also shows all other folders which I want to remove from the tree.

However, it only removes 1 such node them terminates (the search not the program).

Can someone tell me what i am doing wrong?

Thank you
Private Sub FindAndRemoveNode()
        Dim nodes As TreeNodeCollection = TreeView1.Nodes
        Dim n As TreeNode
        For Each n In nodes
            FindRecursiveRemoveNode(n)
            dlgProgress.ProgressBar1.PerformStep()
        Next
    End Sub
 
     Private Sub FindRecursiveRemoveNode(ByVal tNode As TreeNode)
        Dim tn As TreeNode
        For Each tn In tNode.Nodes
            dlgProgress.tbFileName.Text = tn.Text.ToString()
            dlgProgress.ProgressBar1.PerformStep()
            If InStr(tn.Text, ".exe") Then
                FindRecursiveRemoveNode(tn)
            Else
                tn.Remove()
                FindRecursiveRemoveNode(tn)
            End If
        Next
    End Sub

Open in new window

0
Comment
Question by:jindalee
3 Comments
 
LVL 16

Expert Comment

by:ToddBeaulieu
ID: 24727223
Taking a quick glance at your code, I don't think you're working your way up the tree. Your recursive method should, given a node, remove all child nodes that have no children themselves and call itself on any child nodes that have further child nodes. It seems you're removing a node from the tree and then trying to recurse down into it, after it's gone. I'd process then remove.
0
 
LVL 85

Accepted Solution

by:
Mike Tomlinson earned 500 total points
ID: 24730229
Try this out...
    Private Sub FindAndRemoveNode()
        Dim RemoveList As New List(Of TreeNode)
 
        dlgProgress.ProgressBar1.Style = ProgressBarStyle.Marquee
        For Each n As TreeNode In TreeView1.Nodes
            FindRecursiveRemoveNode(n, RemoveList)
            Application.DoEvents()
        Next
 
        For Each n As TreeNode In RemoveList
            n.Remove()
        Next
        dlgProgress.ProgressBar1.Style = ProgressBarStyle.Blocks
    End Sub
 
    Private Sub FindRecursiveRemoveNode(ByVal tNode As TreeNode, ByVal RemoveList As List(Of TreeNode))
        dlgProgress.tbFileName.Text = tNode.Text
        Application.DoEvents()
        If tNode.Text.ToLower.IndexOf(".exe") <> -1 Then
            RemoveList.Add(tNode)
        Else
            For Each n As TreeNode In tNode.Nodes
                FindRecursiveRemoveNode(n, RemoveList)
            Next
        End If
    End Sub

Open in new window

0
 
LVL 1

Author Closing Comment

by:jindalee
ID: 31597202
Worked a treat..

Thank you!
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
Real-time is more about the business, not the technology. In day-to-day life, to make real-time decisions like buying or investing, business needs the latest information(e.g. Gold Rate/Stock Rate). Unlike traditional days, you need not wait for a fe…
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

829 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question