可不可以对treeview的每个层进行排序? |
尚未結案
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
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 發送簡訊給我 |
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
|
xiaoqlj
一般會員 發表:10 回覆:19 積分:5 註冊:2004-05-28 發送簡訊給我 |
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |