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;
}
}
}
本文實例備有詳實的正文,可以贊助年夜家更好的加以懂得。