DevExpress之TreeList用法实例总结
本文实例总结了DevExpress之TreeList用法,希望对大家学习C#程序设计起到一定的帮助作用。具体实例如下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Drawing;
usingSystem.Windows.Forms;
usingDevExpress.XtraBars;
usingDevExpress.XtraTreeList;
usingDevExpress.XtraTreeList.Nodes;
namespaceDevExpressUtilHelpV3
{
publicstaticclassTreeListToolV3
{
publicdelegatestringBuildPathRule(stringnodeText,stringfullPathInfo);
///<summary>
///获取选中节点到根节点的所有信息
///</summary>
///<paramname="focusedNode">TreeListNode</param>
///<paramname="columnID">列名称</param>
///<paramname="buildPathRule">规则委托</param>
///<returns>路径信息</returns>
publicstaticstringFullPathInfo(thisTreeListNodefocusedNode,stringcolumnID,BuildPathRulebuildPathRule)
{
if(focusedNode==null)
thrownewArgumentNullException("focusedNode");
if(string.IsNullOrEmpty("columnID"))
thrownewArgumentNullException("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;
}
publicdelegateboolCompareNodeRule(TreeListNodefocusedNode);
///<summary>
///获取筛选节点到根节点的所有信息
///</summary>
///<paramname="focusedNode">TreeListNode</param>
///<paramname="columnID">列名称</param>
///<paramname="compareNodeRule">规则委托</param>
///<paramname="buildPathRule">规则委托</param>
///<returns>路径信息</returns>
publicstaticstringFilterPathInfo(thisTreeListNodefocusedNode,stringcolumnID,CompareNodeRulecompareNodeRule,BuildPathRulebuildPathRule)
{
if(focusedNode==null)
thrownewArgumentNullException("focusedNode");
if(string.IsNullOrEmpty("columnID"))
thrownewArgumentNullException("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>
///<paramname="tree"></param>
///<paramname="opreateRule"></param>
publicstaticvoidLoopTree(thisTreeListtree,Action<TreeListNode>opreateRule)
{
if(tree==null)
thrownewArgumentNullException("tree");
foreach(TreeListNodenodeintree.Nodes)
{
opreateRule(node);
if(node.Nodes.Count>0)
{
LoopTreeNodes(node,opreateRule);
}
}
}
///<summary>
///递归遍历TreeListNode节点
///</summary>
///<paramname="node"></param>
///<paramname="opreateRule"></param>
publicstaticvoidLoopTreeNodes(thisTreeListNodenode,Action<TreeListNode>opreateRule)
{
if(node==null)
thrownewArgumentNullException("node");
foreach(TreeListNode_childNodeinnode.Nodes)
{
opreateRule(_childNode);
LoopTreeNodes(_childNode,opreateRule);
}
}
///<summary>
///递归遍历TreeListNode,当opreateRule返回false停止循环
///</summary>
///<paramname="node">TreeListNode</param>
///<paramname="opreateRule">Func<TreeListNode,bool></param>
publicstaticvoidLoopTreeNodes_Break(thisTreeListNodenode,Func<TreeListNode,bool>opreateRule)
{
if(node==null)
thrownewArgumentNullException("node");
foreach(TreeListNode_childNodeinnode.Nodes)
{
if(!opreateRule(_childNode))
break;
LoopTreeNodes_Break(_childNode,opreateRule);
}
}
///<summary>
///递归遍历TreeListNode,当opreateRule返回false跳出循环,直接进入下次循环
///</summary>
///<paramname="node">TreeListNode</param>
///<paramname="opreateRule">Func<TreeListNode,bool></param>
publicstaticvoidLoopTreeNodes_Continue(thisTreeListNodenode,Func<TreeListNode,bool>opreateRule)
{
if(node==null)
thrownewArgumentNullException("node");
foreach(TreeListNode_childNodeinnode.Nodes)
{
if(!opreateRule(_childNode))
continue;
LoopTreeNodes_Continue(_childNode,opreateRule);
}
}
publicdelegateboolCheckNodeRule(TreeListNodefucusedNode);
publicdelegatevoidCheckNodeNullRule();
///<summary>
///节点为null检查
///</summary>
///<paramname="fucusedNode">TreeListNode</param>
///<paramname="checkNodeRule">若为NULL,处理逻辑</param>
///<returns>TreeListNode</returns>
publicstaticTreeListNodeCheckNull(thisTreeListNodefucusedNode,CheckNodeNullRulecheckNodeRule)
{
if(fucusedNode==null)
{
checkNodeRule();
returnnull;
}
returnfucusedNode;
}
///<summary>
///正对节点的检查逻辑
///</summary>
///<paramname="fucusedNode">TreeListNode</param>
///<paramname="checkNodeRule">检查逻辑代码[委托]</param>
///<returns>TreeListNode</returns>
publicstaticTreeListNodeCheck(thisTreeListNodefucusedNode,CheckNodeRulecheckNodeRule)
{
if(fucusedNode!=null)
returncheckNodeRule(fucusedNode)==true?fucusedNode:null;
returnnull;
}
///<summary>
///水平滚动条
///</summary>
///<paramname="tree">TreeList</param>
publicstaticvoidHorzScroll(thisTreeListtree)
{
if(tree==null)
thrownewArgumentNullException("tree");
tree.OptionsView.AutoWidth=false;
tree.BestFitColumns();
tree.HorzScrollVisibility=ScrollVisibility.Always;
}
///<summary>
///为TreeList附加右键菜单
///MouseUp(objectsender,MouseEventArgse)事件中调用
///</summary>
///<paramname="tree">TreeList</param>
///<paramname="e">MouseEventArgs</param>
///<paramname="menu">PopupMenu</param>
///<paramname="attachMenuRule">AttachMenuRule</param>
publicstaticvoidAttachMenu(thisTreeListtree,MouseEventArgse,PopupMenumenu,Func<TreeListNode,bool>attachMenuRule)
{
if(tree==null)
thrownewArgumentNullException("tree");
if(menu==null)
thrownewArgumentNullException("menu");
if(e.Button==MouseButtons.Right&&Control.ModifierKeys==Keys.None&&tree.State==TreeListState.Regular)
{
Point_point=newPoint(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(objectsender,NodeEventArgse)
///</summary>
///<paramname="node"></param>
///<paramname="check"></param>
publicstaticvoidProcessNodeCheckState(thisTreeListNodenode,CheckStatecheck)
{
if(node==null)
thrownewArgumentNullException("node");
SetCheckedChildNodes(node,check);
SetCheckedParentNodes(node,check);
}
///<summary>
///设置子节点CheckState
///</summary>
///<paramname="node"></param>
///<paramname="check"></param>
privatestaticvoidSetCheckedChildNodes(TreeListNodenode,CheckStatecheck)
{
if(node!=null)
{
node.LoopTreeNodes((TreeListNode_node)=>
{
_node.CheckState=check;
});
}
}
///<summary>
///设置父节点CheckState
///</summary>
///<paramname="node"></param>
///<paramname="check"></param>
privatestaticvoidSetCheckedParentNodes(TreeListNodenode,CheckStatecheck)
{
if(node.ParentNode!=null)
{
bool_checkStatus=false;
CheckState_nodeState;
node.LoopTreeNodes_Break((TreeListNode_node)=>
{
_nodeState=_node.CheckState;
if(!check.Equals(_nodeState))
{
_checkStatus=!_checkStatus;
returnfalse;//跳出循环
}
returntrue;//继续循环
});
node.ParentNode.CheckState=_checkStatus?CheckState.Indeterminate:check;
SetCheckedParentNodes(node.ParentNode,check);
}
}
///<summary>
///根据CheckState获取TreeListNode
///</summary>
///<paramname="tree">TreeList</param>
///<paramname="state">CheckState</param>
///<paramname="GetNodesByStateRule">返回True的时候继续</param>
///<returns>TreeListNode集合</returns>
publicstaticList<TreeListNode>GetNodesByState(thisTreeListtree,CheckStatestate,Func<TreeListNode,bool>GetNodesByStateRule)
{
if(tree==null)
thrownewArgumentNullException("tree");
List<TreeListNode>_checkNodes=newList<TreeListNode>();
tree.LoopTree((TreeListNodenode)=>
{
if(GetNodesByStateRule(node))
{
if(node.CheckState==state)
_checkNodes.Add(node);
}
});
return_checkNodes;
}
}
}
本文实例备有详尽的注释,可以帮助大家更好的加以理解。