TreeViewAdv
功能:介紹
工作在幾個不同的項目,我需要顯示和編輯分層數據。 當然,你會做的第一件事是使用標準的.NET TreeView
控制。 它工作得很好,如果你只需要基本的功能。 但是,學習這種控制做更復雜的東西,不是一件容易的事。 我無法找到一個替代的TreeView
控制是免費的,完全符合我的需要,所以最後我決定寫我自己的。
這種控制主要來源於Java Swing的組件架構,進行一些修改。 這些措施的TreeViewAdv
控制的主要特點是:
Multiselection :多個節點選擇
Unlimited number of controls for each node:不限制每個節點的控件數;比如,你可以在一個節點中顯示3個icon、一個CheckBox、兩個Label
Multicolumns:多列
Load on Demand :節點惰性加載,不在一開始載入全部的節點
Drag & Drop highlighting:動態高亮拖放的位置
100% pure .NET code :不用任何的API
[模型-視圖構架]
我非常喜歡模型-視圖構架(Model-View Architecture),然後決定在這個控件中使用這個設計模式。該模式主要的思想是把模型(業務對象)和它的實現(控件)分開。當模型改變的時候,觸發對應的事件。代碼如下:
1 public interface ITreeModel 2 { 3 IEnumerable GetChildren(TreePath treePath); 4 bool IsLeaf(TreePath treePath); 5 6 event EventHandler<TreeModelEventArgs> NodesChanged; 7 event EventHandler<TreeModelEventArgs> NodesInserted; 8 event EventHandler<TreeModelEventArgs> NodesRemoved; 9 event EventHandler<TreePathEventArgs> StructureChanged; 10 }
下面的類TreePath用以獲取樹的路徑:
1 public class TreePath 2 { 3 public object[] FullPath{ get; } 4 public object LastNode{ get; } 5 public object FirstNode{ get; } 6 }
TreeView使用
在源代碼中,你可以發現兩個使用TreeViewAdv的例子。最簡單的方法是使用TreeModel。你所要做的只是向Tree中填充數據,然後顯示它。
1 _model = new TreeModel(); 2 _model.Nodes.Add(new Node("Root")); 3 _tree.Model = _model;
ITreeModel
接口,看看代碼中的folder browser,就會明白很多了。TreeView
的外觀和行爲的屬性。 主要的有:-
Model
-指定此屬性顯示你的模型。 -
NodeControls
-節點控制,將被用於可視化的模型。 您應該提供至少一個NodeControl
才能看到的模型。 -
LoadOnDemand
-所有在啓動或子節點的父節點展開時。 -
SelectionMode
-Single
(無多選),Multi
,MultiSameParent
(只有一個節點的子節點可多選項)。 -
UseColumns
-顯示列。 -
Columns
-列的集合。 對於每一列,你可以指定它的頭,寬度和對齊方式。
NodeControls
標準的TreeView
顯示的每個節點只有一個圖標, CheckBox
和Label
。 在TreeViewAdv
,您可以使用任意數量的NodeControl
。 所有控件都必須繼承抽象類從“ NodeControl
“。 繼承的類包含的繪製控件和響應用戶的動作 - 鼠標和鍵盤事件。
所有NodeControl
的類圖:
BindableControl
類提供' DataPropertyName
',這是用於控制來讀取和寫入數據的節點。 所有你需要的是指定你的類的屬性的名稱。
TreeViewAdv控件下載和英文說明:http://www.codeproject.com/Articles/14741/Advanced-TreeView-for-NET