程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> DevExpress之TreeList用法實例總結

DevExpress之TreeList用法實例總結

編輯:C#入門知識

DevExpress之TreeList用法實例總結。本站提示廣大學習愛好者:(DevExpress之TreeList用法實例總結)文章只能為提供參考,不一定能成為您想要的結果。以下是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);
    /// <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;
    }
  }
}

本文實例備有詳實的正文,可以贊助年夜家更好的加以懂得。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved