• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Chip Studio

            常用鏈接

            統(tǒng)計(jì)

            最新評(píng)論

            TreeView使用筆記

            TreeView使用筆記

            TreeView由節(jié)點(diǎn)構(gòu)成,建樹通過對(duì)TreeView.items屬性進(jìn)行操作。Items是一個(gè)TTreeNodes對(duì)象,這是一個(gè)TTreeNode集。

            一、針對(duì)TTreeNodes,也就是 TreeView.Items,有這些屬性:
            1、count,節(jié)點(diǎn)個(gè)數(shù)。
            2、item[index] ,通過index得到節(jié)點(diǎn)。

            二、針對(duì)TTreeNodes,也就是 TreeView.Items,常用的添加節(jié)點(diǎn)的操作有:
            AddFirst添加第一個(gè)根節(jié)點(diǎn)。由此函數(shù)添加的節(jié)點(diǎn)總排在前面,除非后來又使用此函數(shù)添加了一個(gè)節(jié)點(diǎn),則后添加的節(jié)點(diǎn)將排在前面。該函數(shù)返回新添加的節(jié)點(diǎn)。
            AddChildFirst添加第一個(gè)子節(jié)點(diǎn),要求有父節(jié)點(diǎn)作為其參數(shù)。返回新添加的節(jié)點(diǎn)。
            AddChild添加一個(gè)子節(jié)點(diǎn),要求有父節(jié)點(diǎn)作為其參數(shù)。返回新添加的節(jié)點(diǎn)。
            Add添加一個(gè)兄弟節(jié)點(diǎn),要求有兄弟節(jié)點(diǎn)作為其參數(shù)。返回新添加的節(jié)點(diǎn)。

            三、針對(duì)TTreeNodes,也就是 TreeView.Items,常用的得到節(jié)點(diǎn)的操作有:
            GetFirstNode() 得到根節(jié)點(diǎn)。
            然后配合TTreeNode.GetNext(),就可以訪問所有的節(jié)點(diǎn)。

            四、建樹舉例:

            var
            root_node,cur_node:TTreeNode;
            begin
            root_node:=AddFirst(nil,'根節(jié)點(diǎn)1');
            cur_node:=addChildfirst(root_node,nil,'根節(jié)點(diǎn)1_child1');
            add(cur_node,'根節(jié)點(diǎn)1_child2');
            root_node:=Add(nil,'根節(jié)點(diǎn)2');
            AddChildFirst(root_node,''根節(jié)點(diǎn)2_child1');
            end;

            五、事件觸發(fā):
            當(dāng)從一個(gè)節(jié)點(diǎn)跳到另一個(gè)節(jié)點(diǎn),會(huì)觸發(fā)TTreeView.OnChange事件。該事件中,將傳遞node,即當(dāng)前被選中的節(jié)點(diǎn)。

            當(dāng)修改一個(gè)節(jié)點(diǎn)的text時(shí),會(huì)觸發(fā)TTreeView.onEdit事件。


            六、將節(jié)點(diǎn)和節(jié)點(diǎn)所對(duì)應(yīng)的數(shù)據(jù)聯(lián)系起來
            對(duì)于每個(gè)TTreeNode,有個(gè)Data屬性,可以存放一個(gè)指針。我們可以利用這個(gè)域來存放與節(jié)點(diǎn)對(duì)應(yīng)的自己的數(shù)據(jù)。
            1.我們先定義一個(gè)數(shù)據(jù)結(jié)構(gòu),作為記錄我們要記錄的數(shù)據(jù)。如:
            type
            PMyData=^TMyData;
            TMyData=Record
            sFName:string;
            sLName:String;
            nIndex:integer;
            end;

            2.然后,創(chuàng)建數(shù)時(shí),將節(jié)點(diǎn)和節(jié)點(diǎn)數(shù)據(jù)聯(lián)系起來:
            procedure TForm1.Button1Click(Sender: TObject);
            var
            myshuju: PMyData
            cur_node:TTreeNode;
            begin
            New(MyRecPtr); //記住,一定要先分配內(nèi)存。有幾個(gè)節(jié)點(diǎn),就要分配幾次內(nèi)存。
            myshuju^.FName:=Edit1.Text;
            Myshuju^.LName := Edit2.Text;
            TreeViewIndex := StrToInt(Edit3.Text);
            with TreeView1 do
            begin
            cur_node:=items.AddFirst(nil,'first');
            cur_node.data:=myshuju;
            end;
            end;

            3.當(dāng)我們選中一個(gè)節(jié)點(diǎn)時(shí),就可以使用我們的數(shù)據(jù)了。
            procedure TForm1.TreeView1Change(Sender:TObject;Node:TTreeNode);
            begin
            if node.data<>nil then
            self.label1.caption:=pmyData(node.data)^.Fname+pmyData(node.data)^.Lname
            end;


            七、一般使用流程:
            1、添加全局變量:
            b_first:boolean; //記錄是否是第一次訪問節(jié)點(diǎn),因?yàn)榇藭r(shí)數(shù)據(jù)還未準(zhǔn)備好,而一旦訪問節(jié)點(diǎn)就會(huì)觸發(fā)OnChange事件,在此事件處理函數(shù)中也許會(huì)出錯(cuò)。
            2、在FormCreate中,
            a、設(shè)置b_first:=true;
            b. 創(chuàng)建數(shù)并將節(jié)點(diǎn)與數(shù)據(jù)聯(lián)系。
            3、在FormShow中
            設(shè)置b_first:=false;
            4.在事件OnChange中處理節(jié)點(diǎn)被選中事件。
            5.在Edit中處理節(jié)點(diǎn)被修改Text事件。
            并調(diào)用OnChange.
            6.在 TreeView.Destory中
            釋放Data 中指向的內(nèi)存空間。


            posted on 2008-02-14 13:23 MyChip 閱讀(221) 評(píng)論(0)  編輯 收藏 引用

            精品国产乱码久久久久久浪潮| 亚洲国产一成久久精品国产成人综合 | 久久久久国产精品嫩草影院| 久久亚洲电影| 欧美黑人又粗又大久久久| 亚洲国产精品久久| 无码AV波多野结衣久久| 国产成人精品久久亚洲高清不卡 | 香蕉99久久国产综合精品宅男自| 欧洲人妻丰满av无码久久不卡 | Xx性欧美肥妇精品久久久久久| 久久受www免费人成_看片中文| 亚洲AV日韩精品久久久久久久| 久久精品国产第一区二区| 精品久久久久久无码专区| 国产精品久久久香蕉| 99久久婷婷国产综合精品草原| 久久综合88熟人妻| 99精品国产免费久久久久久下载 | 性欧美大战久久久久久久| 久久伊人精品青青草原高清| 亚洲乱码中文字幕久久孕妇黑人| 久久久久久国产精品免费免费 | 久久久久无码精品| 中文字幕一区二区三区久久网站 | 亚洲欧美成人综合久久久| 狠狠色丁香久久婷婷综合图片| 久久亚洲欧洲国产综合| 国产成人精品久久| 精品国产热久久久福利| 99久久www免费人成精品| 久久综合丁香激情久久| 狠狠狠色丁香婷婷综合久久五月 | 好久久免费视频高清| 国产成人久久精品一区二区三区 | 国产女人aaa级久久久级| 99久久无码一区人妻| 无码任你躁久久久久久| 久久这里只精品99re66| 色偷偷88888欧美精品久久久| 婷婷久久香蕉五月综合加勒比|