2012-08-27 9 views
5

मैं या तो सभी रूट नोड्स या सभी बच्चे नोड्स (वर्चुअल ट्री व्यू में सभी नोड्स) का चयन करना चाहता हूं।
मैं सभी जड़ नोड्स चयन करने के लिए इस कोड का उपयोग करने के लिए कोशिश की है:वर्चुअलस्ट्रिंगट्री में सभी रूट या सभी बच्चे नोड्स का चयन कैसे करें?

procedure SelectAllRoots; 
var 
    Node: PVirtualNode; 
begin 
    Form1.VirtualStringTree1.BeginUpdate; 
    Node := Form1.VirtualStringTree1.GetFirst; 
    while True do 
    begin 
    if Node = nil then 
     Break; 
    if not (vsSelected in Node.States) then 
     Node.States := Node.States + [vsSelected]; 
    Node := Form1.VirtualStringTree1.GetNext(Node); 
    end; 
    Form1.VirtualStringTree1.EndUpdate; 
end; 

मैं वहाँ एक छोटा सा गड़बड़ है बता सकते हैं। चयन या तो अपूर्ण है या अटक गया है। मैं क्या गलत कर रहा हूं ?

संपादित करें:
मैं मल्टी चयन का उपयोग करता हूं।

+0

मेरे पास बहु चयन संपत्ति सक्षम है। उस तरह मुझे नोड का उपयोग करने के लिए मजबूर करता है। स्टेटस। क्षमा करें, पहले उल्लेख किया जाना चाहिए था। –

उत्तर

11

1. का चयन करें सभी जड़ नोड्स:

procedure SelectRootNodes(AVirtualTree: TBaseVirtualTree); 
var 
    Node: PVirtualNode; 
begin 
    AVirtualTree.BeginUpdate; 
    try 
    Node := AVirtualTree.GetFirst; 
    while Assigned(Node) do 
    begin 
     AVirtualTree.Selected[Node] := True; 
     Node := AVirtualTree.GetNextSibling(Node); 
    end; 
    finally 
    AVirtualTree.EndUpdate; 
    end; 
end; 

2. चुनें सभी बच्चे नोड्स:

सभी जड़ नोड्स का चयन करने के लिए आप निम्न प्रक्रिया का उपयोग कर सकते

सभी बच्चे नोड्स का चयन करने के लिए, स्वतंत्र स्तर, आपको रिकू का उपयोग करने की आवश्यकता है इस तरह के rsive समारोह:

procedure SelectChildNodes(AVirtualTree: TBaseVirtualTree); 
var 
    Node: PVirtualNode; 

    procedure SelectSubNodes(ANode: PVirtualNode); 
    var 
    SubNode: PVirtualNode; 
    begin 
    SubNode := AVirtualTree.GetFirstChild(ANode); 
    while Assigned(SubNode) do 
    begin 
     SelectSubNodes(SubNode); 
     AVirtualTree.Selected[SubNode] := True; 
     SubNode := AVirtualTree.GetNextSibling(SubNode); 
    end; 
    end; 

begin 
    AVirtualTree.BeginUpdate; 
    try 
    Node := AVirtualTree.GetFirst; 
    while Assigned(Node) do 
    begin 
     SelectSubNodes(Node); 
     Node := AVirtualTree.GetNextSibling(Node); 
    end; 
    finally 
    AVirtualTree.EndUpdate; 
    end; 
end; 
+1

एक आकर्षण की तरह काम करता है। धन्यवाद :) –

संबंधित मुद्दे