線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1538
推到 Plurk!
推到 Facebook!

TreeView複製及貼上一問??

答題得分者是:senso
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#1 引用回覆 回覆 發表時間:2011-01-28 00:17:09 IP:122.118.xxx.xxx 訂閱
請教各位大大
如何把TreeView中的子目錄,複製到另一結點,例如:把原先的B等子目錄,按復製後
可貼到C下變子目錄,如下圖,我有參考pireer前輩的文章,pireer也有分享程式,但是
前輩上傳的程式碼,已找不到了,請問有誰有留這方面的cord,或是能給我個解決方向,
謝謝線上各位大大
,
root__
|__A
|__B
|__B1
|__B2
|__C

2.
root__
|__A
|__B
|__B1
|__B2
|__C
|__B
|__B1
|__B2
------
努力往往是甘苦的!!一起勉勵
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2011-01-30 22:39:25 IP:122.118.xxx.xxx 訂閱
請教各位大大...
是我寫的方式錯了嗎?還是不清楚我要問的意思,
可以請各位大大,給我個方向或是答案,...謝謝
------
努力往往是甘苦的!!一起勉勵
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2011-02-01 17:34:55 IP:61.219.xxx.xxx 訂閱
不知道你說哪篇..找不到

你可以把要複製的節點用遞回的方式add到新的treeview,到要貼上的時候從那個treeview再add回原來的treeview
(也可以用只暫存一個TTreeNode *tmpNode,就省下新的treeview)


nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2011-02-08 12:23:46 IP:59.120.xxx.xxx 訂閱
http://delphi.ktop.com.tw/board.php?cid=168&fid=913&tid=88615

這是之前pireer前輩所發問的問題...謝謝
------
努力往往是甘苦的!!一起勉勵
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2011-02-08 17:51:34 IP:61.219.xxx.xxx 訂閱
好像都是自己寫function吧
下面我自己寫的,再測看看吧


[code cpp]
void CopyNodes(TTreeNode *SrcNode,TTreeNodes *DestNode,bool child); //先存選取的節點,之後再複製子節點
void CopyNodes2(TTreeNode *SrcNode,TTreeNode *DestNode,bool child); //遞回複製Node

//---------------------------------------------------------------------------
void TForm1::CopyNodes(TTreeNode *SrcNode,TTreeNodes *DestNodes,bool child)
{
//先存選取的節點,之後再複製子節點
TTreeNode *newNode;
TTreeNode *DestNode = DestNodes->Owner->Selected; //因為treeview2是空的,若用DestNode->Owner取TTreeNodes會錯誤
if (child) newNode = DestNodes->AddChildObject(DestNode,SrcNode->Text,SrcNode->Data); //建立子節點
else newNode = DestNodes->AddObjectFirst(DestNode,SrcNode->Text,SrcNode->Data); //建立節點
if (SrcNode->getFirstChild()) //若選取的節點有子節點
CopyNodes2(SrcNode->getFirstChild(),newNode,true);
}
//---------------------------------------------------------------------------
void TForm1::CopyNodes2(TTreeNode *SrcNode,TTreeNode *DestNode,bool child)
{
TTreeNode *newNode;
if (child) newNode = DestNode->Owner->AddChildObject(DestNode,SrcNode->Text,SrcNode->Data); //建立子節點
else newNode = DestNode->Owner->AddObject( DestNode,SrcNode->Text,SrcNode->Data); //建立節點
TTreeNode *ChildNode = SrcNode->getFirstChild(); //是否有子節點
TTreeNode *NextNode = SrcNode->GetNextChild(SrcNode); //是否節點
if (ChildNode) CopyNodes2(ChildNode,newNode,true); //複製子節點
if (NextNode) CopyNodes2(NextNode,newNode,false); //複製節點
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender) //複製
{
TTreeNode *SrcNode = TreeView1->Selected;
TTreeNodes *DestNodes = TreeView2->Items;

DestNodes->Clear(); //若暫存有AddObject,應先將Data的Object delete
CopyNodes(SrcNode,DestNodes,false);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) //貼上
{
TTreeNode *SrcNode = TreeView2->Items->GetFirstNode();
TTreeNodes *DestNodes = TreeView1->Items;

CopyNodes(SrcNode,DestNodes,true);
TreeView1->SetFocus();
}
//---------------------------------------------------------------------------

[/code]

nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#6 引用回覆 回覆 發表時間:2011-02-09 13:31:59 IP:59.120.xxx.xxx 訂閱
  1. 你好:
    我只有一個TreeView1,沒有TreeView2,可能前輩誤會我的意思了.
    我的TreeView1只有一個,是動態新增,刪除node,小弟是想在同一
    TreeView1做動態複製及貼上~ 謝謝

    [code cpp]

    //---------------------------------------------------------------------------

    [/code]
  2. void __fastcall TForm1::Button1Click(TObject *Sender) //複製
  3. {
  4. TTreeNode *SrcNode = TreeView1->Selected;
  5. TTreeNodes *DestNodes = TreeView2->Items; //<--為什麼會有TreeView2????
  6. DestNodes->Clear(); //若暫存有AddObject,應先將Data的Object delete
  7. CopyNodes(SrcNode,DestNodes,false);
  8. }
  9. //---------------------------------------------------------------------------
  10. void __fastcall TForm1::Button2Click(TObject *Sender) //貼上
  11. {
  12. TTreeNode *SrcNode = TreeView2->Items->GetFirstNode(); //<--為什麼會有TreeView2????
  13. TTreeNodes *DestNodes = TreeView1->Items;
  14. CopyNodes(SrcNode,DestNodes,true);
  15. TreeView1->SetFocus();
  16. }
  17. //--------------------------------------------------------------------------- 請在此區域輸入程式碼
------
努力往往是甘苦的!!一起勉勵
senso
高階會員


發表:5
回覆:126
積分:226
註冊:2003-11-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2011-02-09 15:09:11 IP:61.219.xxx.xxx 訂閱
只要有一個treeview的話,就加一個全域TTreeNode 記要複製的節點


[code cpp]
TTreeNode *tmpNode;

void __fastcall TForm1::Button1Click(TObject *Sender) //複製
{
tmpNode = TreeView1->Selected;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender) //貼上
{
TTreeNode *SrcNode = tmpNode;
TTreeNodes *DestNodes = TreeView1->Items;
CopyNodes(SrcNode,DestNodes,true);
TreeView1->SetFocus();
}
[/code]
編輯記錄
senso 重新編輯於 2011-02-09 00:14:43, 註解 無‧
nokib2002
一般會員


發表:22
回覆:48
積分:14
註冊:2009-08-09

發送簡訊給我
#8 引用回覆 回覆 發表時間:2011-02-10 07:52:59 IP:59.120.xxx.xxx 訂閱
senso前輩你好:
我解決問題了,你的功力真是高深,也幫助到我
謝謝你的幫忙,我另外有二個問題..
可以再麻煩一下你嗎,
問題一是~PDF全螢幕的顯示問題
問題二是~讀取資料夾的路徑
------
努力往往是甘苦的!!一起勉勵
系統時間:2017-10-22 9:05:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!