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

treeview的節點計算

尚未結案
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-12 17:22:08 IP:163.21.xxx.xxx 未訂閱
我把程式碼怎麼寫 才會讓節點的數目 出現在第一個節點後面 之前研究好久都寫不出來 有大大可以指示我一下嗎?! 謝謝
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-12 21:19:13 IP:59.115.xxx.xxx 未訂閱
kenton 妳好:    我提供一個自定函式如下,妳在添加節點與刪除節點的動作之後,都呼叫一次這個自定函式,看看這樣的效果是不是妳所需要的?
// 於 .h 檔案內
private:    // User declarations
    void __fastcall TreeViewRenum(void);    // 於 .cpp 檔案內
void __fastcall TForm1::TreeViewRenum(void)
{
    int no = TreeView1->Items->Count;
    if (no > 0) {
        TStringList *slCol = new TStringList;
        slCol->CommaText = TreeView1->Items->Item[0]->Text;  // 將第一個節點的字樣拆解到 slCol 內
        TreeView1->Items->Item[0]->Text = slCol->Strings[0]   " (" IntToStr(no) ")";  // 重新組合第一個節點的顯示字樣
        delete slCol;
    }
}    // 使用範例
void __fastcall TForm1::btnAddClick(TObject *Sender)
{
    //.... 添加節點資料的動作 ....        TreeViewRenum();
}    void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
    //.... 刪除節點資料的動作 ....        TreeViewRenum();
}
上述自定函式會在第一個節點的後方加上一個空格、左右括號 (括號內為節點總數量的數字),這個自定函式是以空白字元為拆解與組合的基準,因此第一個節點的原有標題字樣中不可含有空白字元,否則就必須修改一下自定函式中拆解與組合的方式。 7 天天敲鍵盤 v 時時按滑鼠 8
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-15 00:22:29 IP:163.21.xxx.xxx 未訂閱
我本來會有4個預設值 怎麼新增都是跑第一個 第一個有變化而已 而且 他是像是從5開始算 因為我的預設值有4個 他好像是用index去計算的 是這樣嗎?! (不太懂~所以提出來問問)
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-15 01:10:48 IP:61.230.xxx.xxx 未訂閱
kenton 妳好:    妳是想要在各個主節點 (第一層節點) 顯示出其下層子節點的數量,例如下圖所示是嗎?
[-]非常重要 (1)
 |  |
 |   -- 1
 |
[-]很重要 (1)
 |  |
 |   -- 2
 |
[-]普通 (2)
 |  |
 |   -- 3
 |  |
 |   -- 4
 |
[-]還好 (1)
    |
     -- 5
7 天天敲鍵盤 v 時時按滑鼠 8
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-15 10:41:20 IP:163.21.xxx.xxx 未訂閱
對對對 就是這樣 要怎麼設計阿?! 拜託跟我講一下 謝謝^^
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-15 14:29:50 IP:59.115.xxx.xxx 未訂閱
kenton 妳好:    程式修改如下,試試看吧:
// 於 .h 檔案內
private:
    void __fastcall TreeViewRenum(TTreeNode* node);    // 於 .cpp 檔案內    // 傳入的參數是 "要計算子節點數量" 的節點
void __fastcall TForm1::TreeViewRenum(TTreeNode* node)
{
    if (node) {
        TStringList *slCol = new TStringList;
        slCol->CommaText = node->Text;
        node->Text = slCol->Strings[0]   " (" IntToStr(node->Count) ")";
        delete slCol;
    }
}    // 使用範例 - 添加節點
void __fastcall TForm1::btnAddClick(TObject *Sender)
{
    TTreeNode* node = TreeView1->Selected;
    AnsiString nodeStr = "新節點";
    TTreeNode* child = TreeView1->Items->AddChild(node, nodeStr);
    TreeView1->Selected = child;        TreeViewRenum(node);
}    // 使用範例 - 刪除節點
void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
    TTreeNode* node = TreeView1->Selected->Parent;
    if (TreeView1->Selected) {
        TreeView1->Items->Delete(TreeView1->Selected);
    }
    TreeViewRenum(node);
}
7 天天敲鍵盤 v 時時按滑鼠 8
kenton
一般會員


發表:24
回覆:21
積分:9
註冊:2005-05-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-15 22:03:17 IP:163.21.xxx.xxx 未訂閱
謝謝RedSnow的解答 終於了解了 謝謝
系統時間:2024-11-23 6:58:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!