国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

[WinForm]DevExpress之TreeList使用小記

2019-11-14 16:48:13
字體:
來源:轉載
供稿:網友
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;        }    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阿合奇县| 望都县| 棋牌| 高州市| 专栏| 拉萨市| 南乐县| 雷州市| 昆山市| 调兵山市| 邵武市| 沙坪坝区| 南皮县| 介休市| 白水县| 陆良县| 碌曲县| 高阳县| 沅江市| 福安市| 屏东市| 太康县| 科尔| 江达县| 抚松县| 温泉县| 西青区| 鲁山县| 喜德县| 民勤县| 宕昌县| 北票市| 河曲县| 喀喇| 库尔勒市| 哈尔滨市| 固安县| 新平| 潼关县| 彝良县| 亳州市|