zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    perl6检测网站CMS脚本(测试代码)
    perl6 struct2-045 EXP
    perl6 单线程破解phpmyadmin脚本
    perl6 登录phpmyadmin
    PHP反序列化漏洞学习
    PHP对象5: define / const /static
    PHP对象4: final 不允许重写方法或不允许继承类
    ISCC之misc复现-High起来!
    宁波市第二届CTF之cripto1
    宁波市第二届CTF部分WP之msc1,msc2
  • 原文地址:https://www.cnblogs.com/jsyb/p/2949087.html
Copyright © 2011-2022 走看看