WinForms.TreeView控件

树形结构是如何产生的
TreeView其实没有哪个属性指明哪个节点为根节点,TopNode真不知道是干什么用的;
它的树形结构是这样产生的:
TreeView tvEg = new TreeView( );

TreeNode rootNode = new TreeNode("Folder0");
TreeNode subNode1 = new TreeNode("Folder0.1");
TreeNode subNode2 = new TreeNode("Folder0.2");

tvEg.Nodes.Add(rootNode);
rootNode.Nodes.Add(subNode1);
rootNode.Nodes.Add(subNode2);

subNode1.Nodes.Add(new TreeNode("File1"));
subNode1.Nodes.Add(new TreeNode("File2"));

subNode2.Nodes.Add(new TreeNode("File1"));

于是就会形成这样一个树形结构:



还需要注意的一点就是使用TreeNode对象时,尤其关注其Name属性和Text属性是不同的。


问题:我想实现动态加载节点集合,但是如果事先不加载,这个父节点就不会出现+/-号,于是我就无法对应其Exband事件,怎么办?
我目前的实现方式是在窗体Load时静态加载全部节点,这样就没有必要再去处理Exband事件了;
但是,一旦节点非常多,这个加载时间可能就太长了!怎么办呢?
答案:可以为其添加一个虚节点,以显示展开符号;然后在展开该节点的时候就可以先清除其所以子节点,然后动态加载其子节点

问题:如何在一个带CheckedBox的二级TreeView中实现一种有逻辑的选择操作,即(取消)选择父节点则(取消)选择了其下的所以子节点,取消全部子节点时则父节点也被取消,否则只有还有一个子节点在,父节点就是被选择状态。
答案:参考以下代码

捕捉AfterCheck事件
private void tvw_AfterCheck(object sender, TreeViewEventArgs e)
{
    TreeNode currentNode 
= e.Node;

    
if ( currentNode.Nodes.Count > 0 )
    
{
        
// 一级节点
        foreach ( TreeNode childNode in e.Node.Nodes )
        
{
            childNode.Checked 
= currentNode.Checked;
        }

    }

    
else
    
{
        
// 二级节点
        bool parentNodeChecked = false;
        TreeNode parentNode 
= currentNode.Parent;
        
if ( parentNode != null )
        
{
            
if (currentNode.Checked)
            
{
                parentNodeChecked 
= true;
            }

            
else
            
{
                
foreach ( TreeNode node in parentNode.Nodes )
                
{
                    
if ( node.Checked )
                    
{
                        
//如果其中的一个已经checked
                        parentNodeChecked = true;
                        
break;
                    }

                }

            }


            parentNode.Checked 
= parentNodeChecked;
        }

    }

}



转载于:https://www.cnblogs.com/Peter-Yung/archive/2007/07/07/809649.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值