我现在碰到一个问题:
(1)怎么样在treeview的每个nodes.text前,加一个可以打勾的方框?
(2)如何实现父节点打勾,全部子节点都打勾?
(3)当全部子节点都没有打勾时,父节点的勾自动去掉?
(4)当部分子节点没有打勾时,而部分节点打勾时,父节点及其父节点的父节点的勾变成灰色?如何取得相应的状态呢?
---就像金山毒霸杀毒软件,它的界面上选择那个盘符(C,D,E,F等)那样,每个盘符下又有子目录,每个子目录下可能还有孙目录,当要杀C盘病毒时,在C盘符打勾,这样就全部选择了C及其下面的目录,但是只要有一个子目录不选(还是有其他目录选择要杀毒),C盘前的那个打勾就变成灰色,但还是有那个打勾在,只有全部子目录都不选择杀毒,c盘符前才没有那个打勾。
怎么实现?????
请教请教!

解决方案 »

  1.   

    http://www.moon-soft.com/download/control/tvcheckboxes.ZIP
      

  2.   

    ----------------------------------------------------------------------------  
    '  
    'Author:lihonggen0  
    'Date:2003-1-20  
    '功能:选择Treeview节点下所有节点  
    '----------------------------------------------------------------------------  
     
    Private  Sub  Form_Load()  
           TreeView1.Checkboxes  =  True  
           TreeView1.Nodes.Add  ,  "R",  "root",  "root"  
           TreeView1.Nodes.Add  "root",  tvwChild,  "key1",  "aa"  
           TreeView1.Nodes.Add  "key1",  tvwChild,  "key11",  "ccc"  
     
           TreeView1.Nodes.Add  "root",  tvwChild,  "key2",  "bb"  
           TreeView1.Nodes.Add  "key2",  tvwChild,  "key21",  "ddd"  
           TreeView1.Nodes.Add  "key2",  tvwChild,  "key211",  "eee"  
           For  I  =  1  To  TreeView1.Nodes.Count  
                   TreeView1.Nodes(I).Expanded  =  True  
           Next  
    End  Sub  
       
    Private  Sub  CheckChild(ByVal  Node  As  MSComctlLib.Node,  ByVal  bCheck  As  Boolean,  Optional  ByVal  bNext  As  Boolean  =  True,  Optional  ByVal  bChild  As  Boolean  =  True)  
             If  Not  Node  Is  Nothing  Then  
                   Node.Checked  =  bCheck  
                   If  Node.Children  And  bChild  Then  
                                   Call  CheckChild(Node.Child,  bCheck,  True,  True)                '对子节点  
                   End  If  
                   If  bNext  Then  
                           Call  CheckChild(Node.Next,  bCheck,  True,  bChild)                    '对同一层节点  
                   End  If  
             End  If  
    End  Sub  
     
    Private  Sub  TreeView1_NodeCheck(ByVal  Node  As  MSComctlLib.Node)  
           Call  CheckChild(Node,  Node.Checked,  False,  True)                                        '处理子节点  
    End  Sub  
      

  3.   

    treeview的每个nodes.text前的勾无法用代码取消,只有再点一下!
    不信,你可以试试!
      

  4.   

    好东东,谢谢 lxcc(虫子|需要点勇气和信心) 了
      

  5.   

    http://www.moon-soft.com/download/control/tvcheckboxes.ZIP
    有两个第三方控件?
      

  6.   

    简单点,如果节点不是太多用for each
    for each nodx in tvw.nodes
        if nodx.parent.key=selectnode.key then
           nodx.check=nodex.parent.check
        end if
    next
    大概就是这样,代码不一定对,思路大概旧这样,具体的自己摸索以下咯:)