Aga.Controls.Tree.TreeViewAdv使用教程之概要介紹

下面的屏幕截圖說明的TreeViewAdv功能:

介紹

工作在幾個不同的項目,我需要顯示和編輯分層數據。 當然,你會做的第一件事是使用標準的.NET TreeView控制。 它工作得很好,如果你只需要基本的功能。 但是,學習這種控制做更復雜的東西,不是一件容易的事。 我無法找到一個替代的TreeView控制是免費的,完全符合我的需要,所以最後我決定寫我自己的。

這種控制主要來源於Java Swing的組件架構,進行一些修改。 這些措施的TreeViewAdv控制的主要特點是:

Model-View architecture :將會在另一篇文章中,說明。
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 }
非常簡單,GetChildren 返回對應的子節點,IsLeaf 返回是否是葉子節點。當拖動等動作時,事件被觸發。

下面的類TreePath用以獲取樹的路徑:
Code
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中填充數據,然後顯示它。
Code
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 (無多選), MultiMultiSameParent (只有一個節點的子節點可多選項)。
  • UseColumns -顯示列。
  • Columns -列的集合。 對於每一列,你可以指定它的頭,寬度和對齊方式。

NodeControls

標準的TreeView顯示的每個節點只有一個圖標, CheckBoxLabel TreeViewAdv ,您可以使用任意數量的NodeControl 所有控件都必須繼承抽象類從“ NodeControl “。 繼承的類包含的繪製控件和響應用戶的動作 - 鼠標和鍵盤事件。

NodeControl

所有NodeControl的類圖:

類圖

BindableControl類提供' DataPropertyName ',這是用於控制來讀取和寫入數據的節點。 所有你需要的是指定你的類的屬性的名稱。

TreeViewAdv控件下載和英文說明:http://www.codeproject.com/Articles/14741/Advanced-TreeView-for-NET

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章