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

可不可以对treeview的每个层进行排序?

尚未結案
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-03-11 14:27:21 IP:218.0.xxx.xxx 未訂閱
我还想问一下,可以不可以对treeview的每个层进行排序? 如: -888 -6 -5 -4 -3 -999 -1 -2 我对888的子层进行排序,变成: -888 -3 -4 -5 -6 -999 -1 -2
------
http://www.nbye.net
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-03-11 15:53:47 IP:218.0.xxx.xxx 未訂閱
各位帮忙啊。
------
http://www.nbye.net
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-03-11 16:24:14 IP:210.65.xxx.xxx 未訂閱
Hi xiaoqlj,
觸發排序:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if TreeView1.Selected <> Nil then
    TreeView1.Selected.AlphaSort(True); // 含以下子節點一併排序,若設為 False 僅排序該一層之節點
end;    將下列指令碼加入 TreeView 的 OnCompare 事件:    procedure TForm1.TreeView1Compare(Sender: TObject; Node1, Node2: TTreeNode;
  Data: Integer; var Compare: Integer);
begin
  case CheckBox1.Checked of
    True  : begin // 遞減
              if node1.Text < node2.Text then
                Compare := -1
              else if node1.Text = node2.Text then
                Compare := 0
              else if node1.Text > node2.Text then
                Compare := 1;
            end;
    False : begin // 遞增
              if node1.Text > node2.Text then
                Compare := -1
              else if node1.Text = node2.Text then
                Compare := 0
              else if node1.Text < node2.Text then
                Compare := 1;
            end;
    end
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-03-11 17:27:07 IP:218.0.xxx.xxx 未訂閱
Fishman ,你好。 没反应TreeViewCompare这个事件不会执行到。
------
http://www.nbye.net
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-03-11 17:31:19 IP:218.0.xxx.xxx 未訂閱
会不会跟TreeView1.Selected.AlphaSort(True); 有关系呢?
------
http://www.nbye.net
xiaoqlj
一般會員


發表:10
回覆:19
積分:5
註冊:2004-05-28

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-03-12 11:27:28 IP:218.0.xxx.xxx 未訂閱
朋友。你的程序可以了,呵呵。 这是按拼间首字母排序的。可以不可以按自己要求进行排序呢?比如,按大小排序?
------
http://www.nbye.net
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-03-14 08:20:13 IP:210.65.xxx.xxx 未訂閱
Hi xiaoqlj,    可以啊,但是必須自己寫程式碼於 OnCompare 事件進行控制!    詳細說明可以看看 Delphi 中的 Help    Write an OnCompare event handler to customize the sort order of the nodes in the tree view. Set the Compare parameter to a value less than 0 if Node1 is less than Node2. Set Compare to 0 if Node1 is equivalent to Node2, and set Compare to a value greater than 0 if Node1 is greater than Node2. If an OnCompare event handler is not provided, tree view nodes are sorted alphabetically, based on their labels.
procedure TForm1.TreeView1Compare(Sender: TObject; Node1, Node2: TTreeNode;
  Data: Integer; var Compare: Integer);
var
  N1,N2 : Double;
begin
  case CheckBox1.Checked of
    True  : begin // 遞減
              if TryStrToFloat(Node1.Text,N1) and TryStrToFloat(Node2.Text,N2) then
                begin
                  if N1 < N2 then
                    Compare := -1
                  else if N1 = N2 then
                    Compare := 0
                  else if N1 > N2 then
                    Compare := 1;
                end
              else
                begin
                  if Node1.Text < Node2.Text then
                    Compare := -1
                  else if Node1.Text = Node2.Text then
                    Compare := 0
                  else if Node1.Text > Node2.Text then
                    Compare := 1;
                end;
            end;
    False : begin // 遞增
              if TryStrToFloat(Node1.Text,N1) and TryStrToFloat(Node2.Text,N2) then
                begin
                  if N1 > N2 then
                    Compare := -1
                  else if N1 = N2 then
                    Compare := 0
                  else if N1 < N2 then
                    Compare := 1;
                end
              else
                begin
                  if Node1.Text > Node2.Text then
                    Compare := -1
                  else if Node1.Text = Node2.Text then
                    Compare := 0
                  else if Node1.Text < Node2.Text then
                    Compare := 1;
                end;
            end;
    end;
end;
發表人 -
------
Fishman
shinjie
資深會員


發表:12
回覆:275
積分:287
註冊:2003-03-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-03-14 10:23:57 IP:203.73.xxx.xxx 未訂閱
插個花一下,有一個參考資料 http://users.iafrica.com/d/da/dart/Delphi/TTreeView/TTreeView_eg11.html ========================================= 程式有問題並不可怕,最怕是不知問題出在那 不知問題在那不可怕,更怕是不知如何問問題 寫程式要從最簡單的開始
------
我將在茫茫人海中尋訪我唯一之靈魂伴侶。
得之;我幸。不得;我命。
系統時間:2024-11-22 19:48:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!