下面的屏幕截图说明的
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 }
非常简单,GetChildren 返回对应的子节点,IsLeaf 返回是否是叶子节点。当拖动等动作时,事件被触发。
下面的类TreePath用以获取树的路径:
TreeView使用
在源代码中,你可以发现两个使用TreeViewAdv的例子。最简单的方法是使用TreeModel。你所要做的只是向Tree中填充数据,然后显示它。
下面的类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
(无多选),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