栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C# > C#教程

DevExpress之TreeList用法实例总结

C#教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DevExpress之TreeList用法实例总结

本文实例总结了DevExpress之TreeList用法,希望对大家学习C#程序设计起到一定的帮助作用。具体实例如下:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using DevExpress.XtraBars;
using DevExpress.XtraTreeList;
using DevExpress.XtraTreeList.Nodes;

namespace DevExpressUtilHelpV3
{
  public static class TreeListToolV3
  {
    public delegate string BuildPathRule(string nodeText, string fullPathInfo);
    /// 
    /// 获取选中节点到根节点的所有信息
    /// 
    /// TreeListNode
    /// 列名称
    /// 规则委托
    /// 路径信息
    public static string FullPathInfo(this TreeListNode focusedNode, string columnID, BuildPathRule buildPathRule)
    {
      if (focusedNode == null)
 throw new ArgumentNullException("focusedNode");
      if (string.IsNullOrEmpty("columnID"))
 throw new ArgumentNullException("columnID");
      string _fullPathInfo = string.Empty;
      _fullPathInfo = focusedNode.GetDisplayText(columnID);
      while (focusedNode.ParentNode != null)
      {
 focusedNode = focusedNode.ParentNode;
 string _nodeText = focusedNode.GetDisplayText(columnID).Trim();
 _fullPathInfo = buildPathRule(_nodeText, _fullPathInfo);
      }
      return _fullPathInfo;
    }
    public delegate bool CompareNodeRule(TreeListNode focusedNode);
    /// 
    /// 获取筛选节点到根节点的所有信息
    /// 
    /// TreeListNode
    /// 列名称
    /// 规则委托
    /// 规则委托
    /// 路径信息
    public static string FilterPathInfo(this TreeListNode focusedNode, string columnID, CompareNodeRule compareNodeRule, BuildPathRule buildPathRule)
    {
      if (focusedNode == null)
 throw new ArgumentNullException("focusedNode");
      if (string.IsNullOrEmpty("columnID"))
 throw new ArgumentNullException("columnID");
      string _fullPathInfo = string.Empty;
      _fullPathInfo = focusedNode.GetDisplayText(columnID);
      while (focusedNode.ParentNode != null)
      {
 focusedNode = focusedNode.ParentNode;
 if (compareNodeRule(focusedNode))
 {
   string _nodeText = focusedNode.GetDisplayText(columnID).Trim();
   _fullPathInfo = buildPathRule(_nodeText, _fullPathInfo);
 }
      }
      return _fullPathInfo;
    }
    /// 
    /// 递归遍历树节点
    /// 
    /// 
    /// 
    public static void LoopTree(this TreeList tree, Action opreateRule)
    {
      if (tree == null)
 throw new ArgumentNullException("tree");
      foreach (TreeListNode node in tree.Nodes)
      {
 opreateRule(node);
 if (node.Nodes.Count > 0)
 {
   LoopTreeNodes(node, opreateRule);
 }
      }
    }
    /// 
    /// 递归遍历TreeListNode节点
    /// 
    /// 
    /// 
    public static void LoopTreeNodes(this TreeListNode node, Action opreateRule)
    {
      if (node == null)
 throw new ArgumentNullException("node");
      foreach (TreeListNode _childNode in node.Nodes)
      {
 opreateRule(_childNode);
 LoopTreeNodes(_childNode, opreateRule);
      }
    }
    /// 
    /// 递归遍历TreeListNode,当opreateRule返回false停止循环
    /// 
    /// TreeListNode
    /// Func
    public static void LoopTreeNodes_Break(this TreeListNode node, Func opreateRule)
    {
      if (node == null)
 throw new ArgumentNullException("node");
      foreach (TreeListNode _childNode in node.Nodes)
      {
 if (!opreateRule(_childNode))
   break;
 LoopTreeNodes_Break(_childNode, opreateRule);
      }
    }
    /// 
    /// 递归遍历TreeListNode,当opreateRule返回false跳出循环,直接进入下次循环
    /// 
    /// TreeListNode
    /// Func
    public static void LoopTreeNodes_Continue(this TreeListNode node, Func opreateRule)
    {
      if (node == null)
 throw new ArgumentNullException("node");
      foreach (TreeListNode _childNode in node.Nodes)
      {
 if (!opreateRule(_childNode))
   continue;
 LoopTreeNodes_Continue(_childNode, opreateRule);
      }
    }
    public delegate bool CheckNodeRule(TreeListNode fucusedNode);
    public delegate void CheckNodeNullRule();
    /// 
    /// 节点为null检查
    /// 
    /// TreeListNode
    /// 若为NULL,处理逻辑
    /// TreeListNode
    public static TreeListNode CheckNull(this TreeListNode fucusedNode, CheckNodeNullRule checkNodeRule)
    {
      if (fucusedNode == null)
      {
 checkNodeRule();
 return null;
      }
      return fucusedNode;
    }
    /// 
    /// 正对节点的检查逻辑
    /// 
    /// TreeListNode
    /// 检查逻辑代码[委托]
    /// TreeListNode
    public static TreeListNode Check(this TreeListNode fucusedNode, CheckNodeRule checkNodeRule)
    {
      if (fucusedNode != null)
 return checkNodeRule(fucusedNode) == true ? fucusedNode : null;
      return null;
    }
    /// 
    /// 水平滚动条
    /// 
    /// TreeList
    public static void HorzScroll(this TreeList tree)
    {
      if (tree == null)
 throw new ArgumentNullException("tree");
      tree.OptionsView.AutoWidth = false;
      tree.BestFitColumns();
      tree.HorzScrollVisibility = ScrollVisibility.Always;
    }
    /// 
    /// 为TreeList附加右键菜单
    /// MouseUp(object sender, MouseEventArgs e)事件中调用
    /// 
    /// TreeList
    /// MouseEventArgs
    /// PopupMenu
    /// AttachMenuRule
    public static void AttachMenu(this TreeList tree, MouseEventArgs e, PopupMenu menu, Func attachMenuRule)
    {
      if (tree == null)
 throw new ArgumentNullException("tree");
      if (menu == null)
 throw new ArgumentNullException("menu");
      if (e.Button == MouseButtons.Right && Control.ModifierKeys == Keys.None && tree.State == TreeListState.Regular)
      {
 Point _point = new Point(Cursor.Position.X, Cursor.Position.Y);
 TreeListHitInfo _hitInfo = tree.CalcHitInfo(e.Location);
 if (_hitInfo.HitInfoType == HitInfoType.Cell)
   tree.SetFocusedNode(_hitInfo.Node);
 if (attachMenuRule(tree.FocusedNode))
   menu.ShowPopup(_point);
      }
    }
    /// 
    /// 设置父节点的状态AfterCheckNode(object sender, NodeEventArgs e)
    /// 
    /// 
    /// 
    public static void ProcessNodeCheckState(this TreeListNode node, CheckState check)
    {
      if (node == null)
 throw new ArgumentNullException("node");
      SetCheckedChildNodes(node, check);
      SetCheckedParentNodes(node, check);
    }
    /// 
    /// 设置子节点CheckState
    /// 
    /// 
    /// 
    private static void SetCheckedChildNodes(TreeListNode node, CheckState check)
    {
      if (node != null)
      {
 node.LoopTreeNodes((TreeListNode _node) =>
 {
   _node.CheckState = check;
 });
      }
    }
    /// 
    /// 设置父节点CheckState
    /// 
    /// 
    /// 
    private static void SetCheckedParentNodes(TreeListNode node, CheckState check)
    {
      if (node.ParentNode != null)
      {
 bool _checkStatus = false;
 CheckState _nodeState;
 node.LoopTreeNodes_Break((TreeListNode _node) =>
 {
   _nodeState = _node.CheckState;
   if (!check.Equals(_nodeState))
   {
     _checkStatus = !_checkStatus;
     return false;//跳出循环
   }
   return true;//继续循环
 });
 node.ParentNode.CheckState = _checkStatus ? CheckState.Indeterminate : check;
 SetCheckedParentNodes(node.ParentNode, check);
      }
    }
    /// 
    /// 根据CheckState获取TreeListNode
    /// 
    /// TreeList
    /// CheckState
    /// 返回True的时候继续
    /// TreeListNode集合
    public static List GetNodesByState(this TreeList tree, CheckState state, Func GetNodesByStateRule)
    {
      if (tree == null)
 throw new ArgumentNullException("tree");
      List _checkNodes = new List();
      tree.LoopTree((TreeListNode node) =>
      {
 if (GetNodesByStateRule(node))
 {
   if (node.CheckState == state)
     _checkNodes.Add(node);
 }
      });
      return _checkNodes;
    }
  }
}

本文实例备有详尽的注释,可以帮助大家更好的加以理解。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/126316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号