最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

DevExpress之TreeList用法實(shí)例總結(jié)

 更新時(shí)間:2014年08月07日 10:14:49   投稿:shichen2014  
這篇文章主要介紹了DevExpress之TreeList用法,對(duì)于C#初學(xué)者有一定的借鑒價(jià)值,需要的朋友可以參考下

本文實(shí)例總結(jié)了DevExpress之TreeList用法,希望對(duì)大家學(xué)習(xí)C#程序設(shè)計(jì)起到一定的幫助作用。具體實(shí)例如下:

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>
    /// 獲取選中節(jié)點(diǎn)到根節(jié)點(diǎn)的所有信息
    /// </summary>
    /// <param name="focusedNode">TreeListNode</param>
    /// <param name="columnID">列名稱</param>
    /// <param name="buildPathRule">規(guī)則委托</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>
    /// 獲取篩選節(jié)點(diǎn)到根節(jié)點(diǎn)的所有信息
    /// </summary>
    /// <param name="focusedNode">TreeListNode</param>
    /// <param name="columnID">列名稱</param>
    /// <param name="compareNodeRule">規(guī)則委托</param>
    /// <param name="buildPathRule">規(guī)則委托</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>
    /// 遞歸遍歷樹節(jié)點(diǎn)
    /// </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節(jié)點(diǎn)
    /// </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,當(dāng)opreateRule返回false停止循環(huán)
    /// </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,當(dāng)opreateRule返回false跳出循環(huán),直接進(jìn)入下次循環(huán)
    /// </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>
    /// 節(jié)點(diǎn)為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>
    /// 正對(duì)節(jié)點(diǎn)的檢查邏輯
    /// </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>
    /// 水平滾動(dòng)條
    /// </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)事件中調(diào)用
    /// </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>
    /// 設(shè)置父節(jié)點(diǎn)的狀態(tài)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>
    /// 設(shè)置子節(jié)點(diǎn)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>
    /// 設(shè)置父節(jié)點(diǎn)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;//跳出循環(huán)
          }
          return true;//繼續(xù)循環(huán)
        });
        node.ParentNode.CheckState = _checkStatus ? CheckState.Indeterminate : check;
        SetCheckedParentNodes(node.ParentNode, check);
      }
    }
    /// <summary>
    /// 根據(jù)CheckState獲取TreeListNode
    /// </summary>
    /// <param name="tree">TreeList</param>
    /// <param name="state">CheckState</param>
    /// <param name="GetNodesByStateRule">返回True的時(shí)候繼續(xù)</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;
    }
  }
}

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

相關(guān)文章

  • C# 基于udp廣播收集局域網(wǎng)類所有設(shè)備信息

    C# 基于udp廣播收集局域網(wǎng)類所有設(shè)備信息

    這篇文章主要介紹了C# 基于udp廣播收集局域網(wǎng)類所有設(shè)備信息的方法,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12
  • C# using語法糖圖文詳解

    C# using語法糖圖文詳解

    這篇文章主要給大家介紹了關(guān)于C# using語法糖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果

    C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果

    這篇文章主要介紹了C#利用反射技術(shù)實(shí)現(xiàn)去掉按鈕選中時(shí)的邊框效果,涉及C#針對(duì)窗口的參數(shù)設(shè)置技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • Unity實(shí)現(xiàn)游戲卡牌滾動(dòng)效果

    Unity實(shí)現(xiàn)游戲卡牌滾動(dòng)效果

    這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)游戲卡牌滾動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Unity UGUI的Outline描邊組件的介紹使用示例

    Unity UGUI的Outline描邊組件的介紹使用示例

    這篇文章主要介紹了Unity UGUI的Outline描邊組件的介紹使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • C#如何添加PPT背景

    C#如何添加PPT背景

    這篇文章主要為大家詳細(xì)介紹了C#如何添加PPT背景,添加純色背景、漸變色背景、圖片背景等,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • C#四舍五入MidpointRounding.AwayFromZero解析

    C#四舍五入MidpointRounding.AwayFromZero解析

    這篇文章主要介紹了C#四舍五入MidpointRounding.AwayFromZero,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • C#編程實(shí)現(xiàn)獲取文件夾中所有文件的文件名

    C#編程實(shí)現(xiàn)獲取文件夾中所有文件的文件名

    這篇文章主要介紹了C#編程實(shí)現(xiàn)獲取文件夾中所有文件的文件名,可實(shí)現(xiàn)獲取特定目錄下制定類型文件名稱的功能,涉及C#針對(duì)文件與目錄的遍歷、查詢等操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • C#實(shí)現(xiàn)JWT無狀態(tài)驗(yàn)證的實(shí)戰(zhàn)應(yīng)用解析

    C#實(shí)現(xiàn)JWT無狀態(tài)驗(yàn)證的實(shí)戰(zhàn)應(yīng)用解析

    這篇文章主要介紹了C#實(shí)現(xiàn)JWT無狀態(tài)驗(yàn)證的實(shí)戰(zhàn)應(yīng)用解析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • C#中Parallel類For、ForEach和Invoke使用介紹

    C#中Parallel類For、ForEach和Invoke使用介紹

    這篇文章介紹了C#中Parallel類For、ForEach和Invoke的使用方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04

最新評(píng)論

竹北市| 洛阳市| 江西省| 厦门市| 屏东县| 绥江县| 安义县| 吉隆县| 梓潼县| 连城县| 日土县| 余江县| 陆河县| 康保县| 尼勒克县| 贵州省| 乌鲁木齐县| 慈利县| 日土县| 昆山市| 高台县| 平阳县| 阿图什市| 郸城县| 上栗县| 金沙县| 吉首市| 慈利县| 奎屯市| 禹城市| 应城市| 珲春市| 左贡县| 武宣县| 昌邑市| 晋州市| 栾城县| 菏泽市| 广河县| 五指山市| 治县。|