精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容。
树形控件能够显示父子关系数据,在UI里经常用到,最近开发时,需要多选树形控件,找了两个,本文例子没有采用,因为复杂,所以没用。不过本文例子的核心特点高性能高级,也是有学习意义的,适合初级程序员向中级程序员进阶时学习。
在处理几个不同的项目时,我需要显示和编辑分层数据。当然,您要做的第一件事就是使用标准的 .NETTreeView控件。如果您只需要基本功能,它就可以很好地工作。但是学习这种控件来做更复杂的事情并不是一件容易的事。我找不到TreeView免费且完全满足我需求的替代控件,所以最后我决定自己编写。
该控件的架构主要来自Java Swing 组件,并进行了一些修改。这些是TreeViewAdv控件的主要功能:
以下屏幕截图说明了这些TreeViewAdv功能:
我真的很喜欢 Model-View 模式,并决定在这个控件中使用它。这种模式的主要思想是将模型(业务对象)与其可视化(控制)分离。如果模型发生变化,它会通过触发相应的事件来通知视图。如果需要,视图会询问模型的详细信息,并显示更改。模型描述为ITreeModelInterface:
public interface ITreeModel
{
IEnumerable GetChildren(TreePath treePath);
bool IsLeaf(TreePath treePath);
event EventHandler<TreeModelEventArgs> NodesChanged;
event EventHandler<TreeModelEventArgs> NodesInserted;
event EventHandler<TreeModelEventArgs> NodesRemoved;
event EventHandler<TreePathEventArgs> StructureChanged;
}
要指定模型中的确切节点,请TreePath使用类。它将从根到节点的路径存储在FullPath属性中。
public class TreePath { public object[] FullPath{ get; } public object LastNode{ get; } public object FirstNode{ get; } }
在源代码中,您可以找到两个如何使用TreeViewAdv. 最简单的方法是使用TreeModel. 您只需要使用数据填充它并在视图中显示它:
_model = new TreeModel(); _model.Nodes.Add(new Node("Root")); _tree.Model = _model;
其中使用的Node类TreeModel仅包含 ' Text' 和 ' IsChecked' 属性。如果您需要额外的属性,您可以创建Node类的派生类并在TreeModel中使用.
但是要使用全部功能TreeViewAdv,您应该创建自己的ITreeModel接口实现。例如,请参阅源代码中提供的文件夹浏览器。
有许多属性可以帮助自定义TreeView. 主要有:
该标准TreeView只能为每个节点显示一个图标、CheckBox和。Label在TreeViewAdv中,您可以使用任意数量的NodeControl. 所有控件都必须继承自 ' NodeControl' 抽象类。继承的类应该包含绘制控件的代码和响应用户操作(鼠标和键盘事件)的代码。
NodeControl这是库提供的所有的类图:
该类BindableControl提供了一个“ DataPropertyName”,用于在控件中读取和写入数据到节点。您只需要指定类的属性名称即可。