Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 14th, 2012  |  syntax: None  |  size: 1.42 KB  |  hits: 9  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. How to remove all but checked nodes and their parents in a treeview?
  2. private void RecursiveCheckNodesDown(TreeNodeCollection tree, bool checkedFlag)
  3.     {
  4.         if (tree != null)
  5.             foreach (TreeNode node in tree)
  6.                 RecursiveCheckNodesDown(node.Nodes, node.Checked = checkedFlag);
  7.     }
  8.  
  9.     private void RecursiveCheckNodesUp(TreeNode node, bool checkedFlag)
  10.     {
  11.         if( node != null )
  12.             RecursiveCheckNodesUp(node.Parent, node.Checked = checkedFlag);
  13.     }
  14.  
  15.     private void SomeTreeBeginUpdate()
  16.     {
  17.         SomeTree.BeginUpdate();
  18.         SomeTree.AfterCheck -= SomeTree_AfterCheck;
  19.     }
  20.  
  21.     private void SomeTreeEndUpdate()
  22.     {
  23.         SomeTree.AfterCheck += SomeTree_AfterCheck;
  24.         SomeTree.EndUpdate();
  25.     }
  26.  
  27.     private void SomeTree_AfterCheck(object sender, TreeViewEventArgs e)
  28.     {
  29.         SomeTreeBeginUpdate();
  30.         RecursiveCheckNodesDown(e.Node.Nodes, e.Node.Checked);
  31.         if( e.Node.Checked )
  32.             RecursiveCheckNodesUp(e.Node.Parent, e.Node.Checked);
  33.         SomeTreeEndUpdate();
  34.     }
  35.  
  36.     this.SomeTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.SomeTree_AfterCheck);
  37.        
  38. //pseudocode
  39. bool prune(treenode t)
  40. {
  41.    bool mayNotDeleteThisNode=t.isChecked;
  42.    foreach(treenode c in t.childnodes)
  43.    {
  44.       if(prune(c)) mayNotDeleteThisNode=true;
  45.    }
  46.  
  47.    if(!mayNotDeleteThisNode)
  48.    {
  49.       delete(t)
  50.    }
  51.  
  52.    return mayNotDeleteThisNode;
  53. }