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

2個TreeView物件的相互對應?

答題得分者是:jow
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-11-08 23:06:23 IP:219.81.xxx.xxx 訂閱
請問我有2個TreeView物件,其樹狀結構都完全一樣,如下所示

TreeView1 TreeView2
AA__ XX__
| |____A1 | |__X1
| |____A2 | |__X2
| |
BB___ YY__
| |___ B1 | |__Y1
| |___B2 | |__Y2
| |
CC___ ZZ__
|___C1 |__Z1
|___C2 |__Z2

目前我只由TreeView1去點選, 當我選到TreeView1的B2時, 我需要在Label1顯示Y1; 如果選到TreeView1的C1時, 我需要在Label1顯示Z1.
請問要程式要如何達到這種做法, 請指教,謝謝.
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-09 00:41:45 IP:123.193.xxx.xxx 訂閱
^_^.
[code delphi]
procedure TForm1.tv1Change(Sender: TObject; Node: TTreeNode);

function Find(TV: TTreeView; NODE: TTreeNode; var Index: Integer): Boolean;
var
I: Integer;
begin
Index := -1;
for I := 0 to TV.Items.Count-1 do
if TV.Items[I] = NODE then
begin
Index := I;
Break;
end;
Result := Index <> -1;
end;

var
Index: Integer;
begin
if Find(tv1, Node, Index) and
(Index < tv2.Items.Count) then
Label1.Caption := tv2.Items[Index].Text;
end;

[/code]
編輯記錄
jow 重新編輯於 2007-11-09 01:17:50, 註解 無‧
jow 重新編輯於 2007-11-09 01:19:04, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-09 00:41:58 IP:75.18.xxx.xxx 未訂閱
您有使用過「進階搜尋」中,「分類」選擇「發表」,「內容」輸入 TreeView,以及「選項」點選「主題、內容任一項符合」嗎?會出現很多TreeView的範例!
個人覺得 Fishman 先進的這篇不錯!他介紹了TreeView的各種事件與方法,搞通了你的問題即可解決,可以參考一下~
nlj859
資深會員


發表:139
回覆:375
積分:322
註冊:2004-03-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-10 00:50:29 IP:219.81.xxx.xxx 訂閱
試過之後無法於Label上顯示,請問可以幫忙看一下程式碼嗎?
感謝.

[code cpp]
bool __fastcall TForm1::Find(TTreeView *TV, TTreeNode* tNode, int Index)
{
int i;
Index=-1;
for (i=0;TV->Items->Count-1;i )
{
if (TV->Selections[i]==tNode)
{
Index=i;
break;
}
}
return (Index!= -1);
}
void __fastcall TForm1::tv1Change(TObject *Sender, TTreeNode *Node)
{
int Index;
if (Find(tv1,Node,Index) && IndexItems->Count)
Label1->Caption=tv2->Items->Item[Index]->Text;
}
[/code]
編輯記錄
nlj859 重新編輯於 2007-11-10 08:06:39, 註解 無‧
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-10 01:01:33 IP:75.41.xxx.xxx 未訂閱
[code cpp]

bool __fastcall TForm1::Find(TTreeView *TV, TTreeNode* tNode, int Index)
{
int i;
Index=-1;
for (i=0;TV->Items->Count-1;i )
{
if (TV->Selections[i]==tNode)
{
Index=i;
break;
}
}
return ( Index != -1 );
}
[/code]
編輯記錄
Stallion 重新編輯於 2007-11-10 01:02:16, 註解 無‧
Stallion 重新編輯於 2007-11-10 01:03:05, 註解 無‧
jow
尊榮會員


發表:66
回覆:751
積分:1253
註冊:2002-03-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-11-10 07:45:23 IP:123.193.xxx.xxx 訂閱
Index的值需回傳:
(1)bool __fastcall TForm1::Find(TTreeView *TV, TTreeNode *tNode, int *Index)
(2)if(Find(tv1,Node,&Index) && Index < tv2->Items->Count)

[code cpp]
//---------------------------------------------------------------------------
bool __fastcall TForm1::Find(TTreeView *TV, TTreeNode *tNode, int *Index)
{
*Index=-1;
for(int i=0;iItems->Count;i )
if (TV->Items->Item[i]==tNode){
*Index=i;
break;
}
return *Index!=-1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::tv1Change(TObject *Sender, TTreeNode *Node)
{
int Index;
if(Find(tv1,Node,&Index)&&IndexItems->Count)
Label1->Caption=tv2->Items->Item[Index]->Text;
}
//---------------------------------------------------------------------------

[/code]
編輯記錄
jow 重新編輯於 2007-11-10 07:48:39, 註解 無‧
jow 重新編輯於 2007-11-10 07:56:30, 註解 無‧
系統時間:2024-05-05 20:59:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!