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; } } }
本文实例备有详尽的注释,可以帮助大家更好的加以理解。