全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1395
推到 Plurk!
推到 Facebook!

請教如何新增node到TreeView中指定的位置呢?

答題得分者是:gemi0305
hwtaiya
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-19 23:35:25 IP:203.67.xxx.xxx 未訂閱
比如說原本TreeView為: Root-- |--child1 |--child2 |--child4 現在想在child2與child4間塞一個child3,請問該如何做? 小弟在TreeView的function中有找到AddChild,AddChildFirst,AddChildObject,...等 但是小弟只會用AddChild及Add()等只需給(TTreeNode *,AnsiString)的,至於一些像AddChildObject(TTreeNode *,AnsiString,void *)最後一項參數不知道要給什麼,順便也請高手們指導一下,謝啦! 我是新手,如果問的會回答的太可笑,請多包涵
------
**** 我是新手,如果問的會回答的太可笑,請多包涵 ****
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-19 23:48:26 IP:61.224.xxx.xxx 未訂閱
hwtaiya你好, 可以參考以下的文章, 有問題再來討論
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-19 23:59:12 IP:61.224.xxx.xxx 未訂閱
我來解釋一下AddObject(或AddChildObject)這個function, 其實他前面兩個參數和Add(或AddChild)一樣, 你應該會用,至於後面的void*參數,就是說, 這個node裡,可以存一些資料,存結構好像比較多... 再上篇文章中,部份程式  
     PMyRec  MyRecPtr;    pItems->AddObject(pItems->Item[TreeViewIndex], "Item"   IntToStr(TreeViewIndex), MyRecPtr);    的MyRecPtr就是上篇文章連結的.h檔中的結構    typedef struct MyRec
{
  AnsiString FName, LName;    } TMyRec;
typedef TMyRec* PMyRec;    
所以只要加入這個node之後,這個node就存有這個結構的資料, 可以讓你做更進階的功能。 國泰平安
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-20 10:53:34 IP:61.224.xxx.xxx 未訂閱
hwtaiya你好, 忘了問答你最初的問題, 如何加入Child3, 你只要用insert就可以做到了, 因為要加第四個item之上,所以用item[3] (從0開始算)    TreeView1->Items->Insert(TreeView1->Items->Item[3],"child3");    這樣就可以加入了 國泰平安
hwtaiya
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-19

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-20 22:05:38 IP:203.73.xxx.xxx 未訂閱
先感謝gemi0305的回答,我初步用您提到的Insert方式,已可成功地插入一個結點,但是插入的位置我還是覺得拿不準,依據小弟的試驗,好像child4的index好像是2(而不是您所說的3),因此加入的位置變成在child1與child2間了,還是說它的index是指同層級的來算(我亂猜的),還請gemi0305或是版上的高手們再指點一下,謝謝! 另外,關於您提到最後void *的引數是否可以做為儲存結點相關資訊,比如說此結點屬於此層級的編號,然後可以利用此編號來指定到此一結點,不知道您是否有看懂我寫的意思… 若 PMyRec MyRecPtr; TTreeNode *mynode; mynode=TreeView1->Insert(TreeView1->Items->Item[3],"child3",MyRecPtr); MyRecPtr->Name = mynode->Text;//這樣用對嗎? MyRecPtr->num = mynode->Index; 然後可能以num為關鍵字來找到mynode或其它特定node嗎? 其中 typedef struct MyRec { AnsiString Name; int num; } TMyRec; typedef TMyRec* PMyRec; 我是新手,如果問的會回答的太可笑,請多包涵 發表人 - hwtaiya 於 2003/07/20 22:20:27
------
**** 我是新手,如果問的會回答的太可笑,請多包涵 ****
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-20 22:58:12 IP:61.224.xxx.xxx 未訂閱
hwtaiya你好, 請注意一下這幾個地方,
     PMyRec MyRecPtr;
TTreeNode *mynode;

MyRecPtr = new TMyRec;  //要new才有地方可以放    mynode=TreeView1->Items->InsertObject(TreeView1->Items->Item[3],"child3",MyRecPtr);
      //綠色是你少加的東西
MyRecPtr->Name = mynode->Text;//這樣用對嗎?
MyRecPtr->num = mynode->Index;     此外,你可加一個button和一個memo,再加上以下的的code    void __fastcall TForm1::Button1Click(TObject *Sender)
{
   Memo1->Lines->Add("Name:  " ((TMyRec*)(TreeView1->Selected->Data))->Name);
   Memo1->Lines->Add("num:  "  (AnsiString)((TMyRec*)(TreeView1->Selected->Data))->num);
}    然後你先選那個child3,再按這個button,meno就會顯示這個node,就是child3所存的值,
但別選的別的node哦,如child1,因為它們裡面沒存東西,
會出現顯示錯誤,
參考看看~
國泰平安
hwtaiya
一般會員


發表:3
回覆:7
積分:2
註冊:2003-07-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-20 23:17:57 IP:203.73.xxx.xxx 未訂閱
再次感謝gemi0305,在星期假日的深夜還這麼熱心的幫助我,太感謝您了… 不過我還是不懂,這樣子多給一個pointer有增加效率或什麼幫助嗎? 因為我要加的資訊還是得自己寫程式加進去(如 MyRecPtr->Name = mynode->Text; MyRecPtr->num = mynode->Index; },不給pointer的話好像也沒有影響,那麼到底好處在那兒呢?再次麻煩您了… **** 我是新手,如果問的會回答的太可笑,請多包涵 ****
------
**** 我是新手,如果問的會回答的太可笑,請多包涵 ****
gemi0305
版主


發表:81
回覆:564
積分:629
註冊:2003-05-11

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-20 23:32:24 IP:61.224.xxx.xxx 未訂閱
hwtaiya你好,    如果你直接拿這個結構來用的話...呵 那如果這個結構有別人要用,別人不就改了你原來的資料...    當然是要用的人,就用pointer"複製"一份去用, 就像是新增一個button, 你會在.h檔裡看到 TButton *Button1; 你總不能直接拿 TButton 來用吧,他只是個元件,    也就像是說,沒有人直接拿int來用, 都要先 int i;  再拿i來用,    不管結構是不是元件之類的東西,但要使用這種"會被大家同時用到"的東西, 當然是用一個pointer來做輔助,程式才會嚴謹~ 國泰平安
系統時間:2024-05-16 20:04:03
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!