Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- How to remove all but checked nodes and their parents in a treeview?
- private void RecursiveCheckNodesDown(TreeNodeCollection tree, bool checkedFlag)
- {
- if (tree != null)
- foreach (TreeNode node in tree)
- RecursiveCheckNodesDown(node.Nodes, node.Checked = checkedFlag);
- }
- private void RecursiveCheckNodesUp(TreeNode node, bool checkedFlag)
- {
- if( node != null )
- RecursiveCheckNodesUp(node.Parent, node.Checked = checkedFlag);
- }
- private void SomeTreeBeginUpdate()
- {
- SomeTree.BeginUpdate();
- SomeTree.AfterCheck -= SomeTree_AfterCheck;
- }
- private void SomeTreeEndUpdate()
- {
- SomeTree.AfterCheck += SomeTree_AfterCheck;
- SomeTree.EndUpdate();
- }
- private void SomeTree_AfterCheck(object sender, TreeViewEventArgs e)
- {
- SomeTreeBeginUpdate();
- RecursiveCheckNodesDown(e.Node.Nodes, e.Node.Checked);
- if( e.Node.Checked )
- RecursiveCheckNodesUp(e.Node.Parent, e.Node.Checked);
- SomeTreeEndUpdate();
- }
- this.SomeTree.AfterCheck += new System.Windows.Forms.TreeViewEventHandler(this.SomeTree_AfterCheck);
- //pseudocode
- bool prune(treenode t)
- {
- bool mayNotDeleteThisNode=t.isChecked;
- foreach(treenode c in t.childnodes)
- {
- if(prune(c)) mayNotDeleteThisNode=true;
- }
- if(!mayNotDeleteThisNode)
- {
- delete(t)
- }
- return mayNotDeleteThisNode;
- }
Advertisement
Add Comment
Please, Sign In to add comment