*NodeCheck event lparameters node llChecked = node.Checked this.CheckSubNodes(node, m.llChecked) * procedure CheckSubNodes lparameters toNode, tlChecked local loChildNode if toNode.Children > 0 loChildNode = toNode.child do while vartype( loChildNode ) = 'O' loChildNode.Checked = m.tlChecked this.CheckSubNodes( loChildNode, m.tlChecked ) loChildNode = loChildNode.next enddo endifHere is a sample:
#Define tvwFirst 0 #Define tvwLast 1 #Define tvwNext 2 #Define tvwPrevious 3 #Define tvwChild 4 Create Cursor myNodes (nodeID i, parentID i, nodeText c(20)) Insert Into myNodes Values (1,0,"Root 1") Insert Into myNodes Values (2,0,"Root 2") Insert Into myNodes Values (3,0,"Root 3") Insert Into myNodes Values (4,1,"Root 1-C1") Insert Into myNodes Values (5,1,"Root 1-C2") Insert Into myNodes Values (6,1,"Root 1-C3") Insert Into myNodes Values (7,2,"Root 2-C1") Insert Into myNodes Values (8,2,"Root 2-C2") Insert Into myNodes Values (9,2,"Root 2-C3") Insert Into myNodes Values (10,4,"C1-C1") Insert Into myNodes Values (11,4,"C1-C2") Insert Into myNodes Values (12,4,"C1-C3") Insert Into myNodes Values (13,4,"C1-C4") Insert Into myNodes Values (14,10,"C1-C1-C1") Insert Into myNodes Values (15,10,"C1-C1-C1") Public oForm oForm = Createobject('myForm') oForm.Show() Define Class myForm As Form Add Object Tree As myTreeView Procedure Init With This.Tree .Width = This.Width .Height = This.Height .Anchor = 15 Select myNodes Scan If parentID = 0 .Nodes.Add(,tvwFirst,Padl(nodeID,3,'_'),nodeText) Else .Nodes.Add(Padl(parentID,3,'_'),tvwChild,Padl(nodeID,3,'_'),nodeText) Endif Endscan Endwith Endproc Enddefine Define Class myTreeView As OleControl OlePublic OleClass='MSComCtlLib.TreeCtrl' Procedure Init With This .linestyle = 1 .indentation = 5 .PathSeparator = '\' .CheckBoxes = .T. Endwith Endproc Procedure NodeCheck Lparameters Node llChecked = Node.Checked This.CheckSubNodes(Node, m.llChecked) Endproc Procedure CheckSubNodes Lparameters toNode, tlChecked Local loChildNode If toNode.Children > 0 loChildNode = toNode.Child Do While Vartype( loChildNode ) = 'O' loChildNode.Checked = m.tlChecked This.CheckSubNodes( loChildNode, m.tlChecked ) loChildNode = loChildNode.Next Enddo Endif Endproc EnddefinePS: You can find documentation and sample code download in first issue of UT Magazine.