锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C#开源技术 / .NET高性能高级树形控件

服务方向

人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

联系方式

固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止全文或局部转载,禁止任何形式的非法使用,侵权必究。点名“简易百科”和闲暇巴盗用锐英源原创内容。

.NET高性能高级树形控件


树形控件能够显示父子关系数据,在UI里经常用到,最近开发时,需要多选树形控件,找了两个,本文例子没有采用,因为复杂,所以没用。不过本文例子的核心特点高性能高级,也是有学习意义的,适合初级程序员向中级程序员进阶时学习。

 

介绍

在处理几个不同的项目时,我需要显示和编辑分层数据。当然,您要做的第一件事就是使用标准的 .NETTreeView控件。如果您只需要基本功能,它就可以很好地工作。但是学习这种控件来做更复杂的事情并不是一件容易的事。我找不到TreeView免费且完全满足我需求的替代控件,所以最后我决定自己编写。

该控件的架构主要来自Java Swing 组件,并进行了一些修改。这些是TreeViewAdv控件的主要功能:

  • 模型视图架构- 将在本文的单独部分中介绍。
  • 多选- 也许您会在标准TreeView中发现的第一个限制是不能选择多个节点。
  • 每个节点的控件数量不限- 您可以显示三个图标 + a CheckBox+ 两个Labels。
  • 多列- 您可以将其拆分TreeView为几列。
  • 按需加载 - 子节点的延迟加载。
  • 注:这是高性能的体现。
  • 拖放突出显示- 动态突出显示放置位置。
  • 100% 纯 .NET 代码- 此控件中未使用 WinAPI。

以下屏幕截图说明了这些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属性中。

C#
public class TreePath
{
    public object[] FullPath{ get; }
    public object LastNode{ get; }
    public object FirstNode{ get; }
}

使用树视图

在源代码中,您可以找到两个如何使用TreeViewAdv. 最简单的方法是使用TreeModel. 您只需要使用数据填充它并在视图中显示它:

C#
_model = new TreeModel();
_model.Nodes.Add(new Node("Root"));
_tree.Model = _model;

其中使用的Node类TreeModel仅包含 ' Text' 和 ' IsChecked' 属性。如果您需要额外的属性,您可以创建Node类的派生类并在TreeModel中使用.

但是要使用全部功能TreeViewAdv,您应该创建自己的ITreeModel接口实现。例如,请参阅源代码中提供的文件夹浏览器。

自定义树视图

有许多属性可以帮助自定义TreeView. 主要有:

  • Model- 将您的模型分配给此属性以显示它。
  • NodeControls- 将用于可视化模型的控件集合。您应该至少提供一个NodeControl以查看模型。
  • LoadOnDemand- 在启动时或父节点展开时读取所有子节点。
  • SelectionMode- Single(不能多选), Multi, MultiSameParent(只能选择一个节点的子节点)。
  • UseColumns- 是否在列中显示数据。
  • Columns- 列的集合。对于每一列,您可以指定其标题、宽度和对齐方式。

节点控件

该标准TreeView只能为每个节点显示一个图标、CheckBox和。Label在TreeViewAdv中,您可以使用任意数量的NodeControl. 所有控件都必须继承自 ' NodeControl' 抽象类。继承的类应该包含绘制控件的代码和响应用户操作(鼠标和键盘事件)的代码。

 

NodeControl这是库提供的所有的类图:

 

该类BindableControl提供了一个“ DataPropertyName”,用于在控件中读取和写入数据到节点。您只需要指定类的属性名称即可。

 

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内