亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

DevExpress之TreeList用法實例總結

2020-01-24 02:34:20
字體:
來源:轉載
供稿:網友

本文實例總結了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);    /// <summary>    /// 獲取選中節點到根節點的所有信息    /// </summary>    /// <param name="focusedNode">TreeListNode</param>    /// <param name="columnID">列名稱</param>    /// <param name="buildPathRule">規則委托</param>    /// <returns>路徑信息</returns>    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);    /// <summary>    /// 獲取篩選節點到根節點的所有信息    /// </summary>    /// <param name="focusedNode">TreeListNode</param>    /// <param name="columnID">列名稱</param>    /// <param name="compareNodeRule">規則委托</param>    /// <param name="buildPathRule">規則委托</param>    /// <returns>路徑信息</returns>    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;    }    /// <summary>    /// 遞歸遍歷樹節點    /// </summary>    /// <param name="tree"></param>    /// <param name="opreateRule"></param>    public static void LoopTree(this TreeList tree, Action<TreeListNode> opreateRule)    {      if (tree == null)        throw new ArgumentNullException("tree");      foreach (TreeListNode node in tree.Nodes)      {        opreateRule(node);        if (node.Nodes.Count > 0)        {          LoopTreeNodes(node, opreateRule);        }      }    }    /// <summary>    /// 遞歸遍歷TreeListNode節點    /// </summary>    /// <param name="node"></param>    /// <param name="opreateRule"></param>    public static void LoopTreeNodes(this TreeListNode node, Action<TreeListNode> opreateRule)    {      if (node == null)        throw new ArgumentNullException("node");      foreach (TreeListNode _childNode in node.Nodes)      {        opreateRule(_childNode);        LoopTreeNodes(_childNode, opreateRule);      }    }    /// <summary>    /// 遞歸遍歷TreeListNode,當opreateRule返回false停止循環    /// </summary>    /// <param name="node">TreeListNode</param>    /// <param name="opreateRule">Func<TreeListNode, bool></param>    public static void LoopTreeNodes_Break(this TreeListNode node, Func<TreeListNode, bool> opreateRule)    {      if (node == null)        throw new ArgumentNullException("node");      foreach (TreeListNode _childNode in node.Nodes)      {        if (!opreateRule(_childNode))          break;        LoopTreeNodes_Break(_childNode, opreateRule);      }    }    /// <summary>    /// 遞歸遍歷TreeListNode,當opreateRule返回false跳出循環,直接進入下次循環    /// </summary>    /// <param name="node">TreeListNode</param>    /// <param name="opreateRule">Func<TreeListNode, bool></param>    public static void LoopTreeNodes_Continue(this TreeListNode node, Func<TreeListNode, bool> 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();    /// <summary>    /// 節點為null檢查    /// </summary>    /// <param name="fucusedNode">TreeListNode</param>    /// <param name="checkNodeRule">若為NULL,處理邏輯</param>    /// <returns>TreeListNode</returns>    public static TreeListNode CheckNull(this TreeListNode fucusedNode, CheckNodeNullRule checkNodeRule)    {      if (fucusedNode == null)      {        checkNodeRule();        return null;      }      return fucusedNode;    }    /// <summary>    /// 正對節點的檢查邏輯    /// </summary>    /// <param name="fucusedNode">TreeListNode</param>    /// <param name="checkNodeRule">檢查邏輯代碼[委托]</param>    /// <returns>TreeListNode</returns>    public static TreeListNode Check(this TreeListNode fucusedNode, CheckNodeRule checkNodeRule)    {      if (fucusedNode != null)        return checkNodeRule(fucusedNode) == true ? fucusedNode : null;      return null;    }    /// <summary>    /// 水平滾動條    /// </summary>    /// <param name="tree">TreeList</param>    public static void HorzScroll(this TreeList tree)    {      if (tree == null)        throw new ArgumentNullException("tree");      tree.OptionsView.AutoWidth = false;      tree.BestFitColumns();      tree.HorzScrollVisibility = ScrollVisibility.Always;    }    /// <summary>    /// 為TreeList附加右鍵菜單    /// MouseUp(object sender, MouseEventArgs e)事件中調用    /// </summary>    /// <param name="tree">TreeList</param>    /// <param name="e">MouseEventArgs</param>    /// <param name="menu">PopupMenu</param>    /// <param name="attachMenuRule">AttachMenuRule</param>    public static void AttachMenu(this TreeList tree, MouseEventArgs e, PopupMenu menu, Func<TreeListNode, bool> 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);      }    }    /// <summary>    /// 設置父節點的狀態AfterCheckNode(object sender, NodeEventArgs e)    /// </summary>    /// <param name="node"></param>    /// <param name="check"></param>    public static void ProcessNodeCheckState(this TreeListNode node, CheckState check)    {      if (node == null)        throw new ArgumentNullException("node");      SetCheckedChildNodes(node, check);      SetCheckedParentNodes(node, check);    }    /// <summary>    /// 設置子節點CheckState    /// </summary>    /// <param name="node"></param>    /// <param name="check"></param>    private static void SetCheckedChildNodes(TreeListNode node, CheckState check)    {      if (node != null)      {        node.LoopTreeNodes((TreeListNode _node) =>        {          _node.CheckState = check;        });      }    }    /// <summary>    /// 設置父節點CheckState    /// </summary>    /// <param name="node"></param>    /// <param name="check"></param>    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);      }    }    /// <summary>    /// 根據CheckState獲取TreeListNode    /// </summary>    /// <param name="tree">TreeList</param>    /// <param name="state">CheckState</param>    /// <param name="GetNodesByStateRule">返回True的時候繼續</param>    /// <returns>TreeListNode集合</returns>    public static List<TreeListNode> GetNodesByState(this TreeList tree, CheckState state, Func<TreeListNode, bool> GetNodesByStateRule)    {      if (tree == null)        throw new ArgumentNullException("tree");      List<TreeListNode> _checkNodes = new List<TreeListNode>();      tree.LoopTree((TreeListNode node) =>      {        if (GetNodesByStateRule(node))        {          if (node.CheckState == state)            _checkNodes.Add(node);        }      });      return _checkNodes;    }  }}

本文實例備有詳盡的注釋,可以幫助大家更好的加以理解。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线观看久久久久久| 亚洲人成人99网站| 精品日韩视频在线观看| 成人午夜两性视频| 欧美第一淫aaasss性| 国产一区二区动漫| 国产亚洲精品久久| 欧美另类极品videosbestfree| 日韩av电影手机在线| 国产最新精品视频| 一区二区av在线| 欧美日韩亚洲高清| 亚洲丝袜在线视频| 国产精品自产拍在线观| 国产成+人+综合+亚洲欧洲| 欧美午夜久久久| 国产视频久久久久| 国语自产精品视频在线看抢先版图片| 久久夜色精品亚洲噜噜国产mv| 亚洲欧美日本伦理| 在线日韩欧美视频| 一本色道久久88精品综合| 日韩精品有码在线观看| 裸体女人亚洲精品一区| 国内外成人免费激情在线视频| 日韩国产一区三区| 国产丝袜一区二区三区| 97久久超碰福利国产精品…| 亚洲视频国产视频| 日韩久久免费视频| 欧美激情国产精品| 色狠狠久久aa北条麻妃| 亚洲国内高清视频| 欧美精品激情在线观看| 亚洲女人天堂av| 国产免费一区二区三区在线能观看| 91黑丝在线观看| 欧美三级欧美成人高清www| 欧美激情精品久久久久久变态| 中日韩美女免费视频网站在线观看| 米奇精品一区二区三区在线观看| 色午夜这里只有精品| 欧美黄色免费网站| 国精产品一区一区三区有限在线| 国产精品96久久久久久又黄又硬| 神马久久久久久| 欧美电影电视剧在线观看| 欧美另类极品videosbest最新版本| 久久精品青青大伊人av| 国产精品三级美女白浆呻吟| 亚洲天堂av电影| www.欧美精品| 国产成人精品久久二区二区| 国产精品久久久久久久久久久久| 日韩免费中文字幕| 久久精品夜夜夜夜夜久久| 国产成人精品999| 欧美亚洲国产成人精品| 在线视频中文亚洲| 欧美激情精品久久久久久大尺度| 91精品国产综合久久香蕉| 欧美视频在线视频| 久久免费精品日本久久中文字幕| 久久精品成人欧美大片| 日韩亚洲国产中文字幕| 国产精品美女av| 日韩精品视频在线观看网址| 4388成人网| 亚洲嫩模很污视频| 国产精品一区二区三区久久| 久久久爽爽爽美女图片| 午夜精品久久久99热福利| 深夜福利亚洲导航| 色狠狠av一区二区三区香蕉蜜桃| 欧美另类老女人| 视频在线一区二区| 国产日韩欧美自拍| 精品久久久久久久久久国产| 自拍视频国产精品| 永久免费看mv网站入口亚洲| 亚洲福利精品在线| 国产精品久久久久久久久久新婚| 亚洲欧美综合另类中字| 欧美在线视频导航| 色狠狠av一区二区三区香蕉蜜桃| 91最新国产视频| 国产suv精品一区二区三区88区| 川上优av一区二区线观看| 亚洲精品永久免费精品| 91在线观看免费高清| 韩国福利视频一区| 一区二区三区无码高清视频| 色哟哟亚洲精品一区二区| 成人国产亚洲精品a区天堂华泰| 欧美影院成年免费版| 亚洲国产成人爱av在线播放| 97在线视频免费| 97在线视频免费| 亚洲wwwav| 亚洲精品美女在线观看播放| 欧美激情一区二区三区高清视频| 亚洲第一男人天堂| 午夜免费在线观看精品视频| 欧美日韩福利电影| 91精品国产91久久| 狠狠色狠狠色综合日日小说| 中文字幕精品一区久久久久| 亚洲影院色无极综合| 欧美成人在线免费| 一区二区在线视频| 国产精品麻豆va在线播放| 日本中文字幕不卡免费| 奇米一区二区三区四区久久| 中文字幕免费精品一区高清| 国产精品人成电影在线观看| 亚洲精品网址在线观看| 亚洲伊人久久大香线蕉av| 91久久久亚洲精品| 国产91精品不卡视频| 丝袜情趣国产精品| 欧美日韩亚洲天堂| 国产精品久久91| 欧美成人自拍视频| 亚洲国产精品悠悠久久琪琪| 国产精品成人av性教育| 日韩av免费在线播放| 欧美亚洲国产视频| 久久人人爽人人爽人人片av高清| 国产精品福利无圣光在线一区| 久久夜精品va视频免费观看| 欧美精品第一页在线播放| 亚洲免费福利视频| 日韩成人性视频| 欧美激情精品久久久久久黑人| 亚洲一区二区三区乱码aⅴ| 麻豆国产精品va在线观看不卡| 国产亚洲在线播放| 欧美一二三视频| 日韩欧美主播在线| 国产成人精品日本亚洲| 日韩久久免费视频| 亚洲国产一区二区三区四区| 国产精品午夜一区二区欲梦| 国产精品福利观看| 久久国产天堂福利天堂| 欧美大肥婆大肥bbbbb| 日韩毛片在线观看| 日韩成人在线视频观看| www.欧美三级电影.com| 97在线观看视频| 中文欧美日本在线资源| 精品中文字幕久久久久久| 亚洲精品自产拍| 欧洲美女7788成人免费视频| 色悠悠久久88| 日韩欧美在线免费观看| 欧美性在线观看| 久久高清视频免费| 欧美黑人xxxⅹ高潮交| 亚洲人成毛片在线播放| 中文字幕亚洲一区二区三区五十路| 国产精品福利观看| 91香蕉电影院| 日韩一区在线视频|