很多时候在进行c#项目的实际开发中,会需要根据条件来设置节点不可勾选,查看devexpress文档发现通过其customdrawnodecheckbox和beforechecknode事件组合使用可以达到,一般设置节点不可以勾选的规则是一样的,所以对代码进行稍微封装。本文实例就展示了devexpress实现禁用treelistnode checkbox的方法。具体如下:
主要功能代码如下:
/// <summary> /// 禁用checkbox /// 说明 /// 在customdrawnodecheckbox事件中使用 /// </summary> /// <param name="tree">treelist</param> /// <param name="conditionhanlder">委托</param> /// <param name="e">customdrawnodecheckboxeventargs</param> public static void disabledcheckbox(this treelistnode tree, predicate<treelistnode> conditionhanlder, customdrawnodecheckboxeventargs e) { if (conditionhanlder(e.node)) { e.objectargs.state = objectstate.disabled; } } /// <summary> /// 禁止操作节点checkbox /// 说明 /// 在beforechecknode事件中使用 /// </summary> /// <param name="tree">treelistnode</param> /// <param name="conditionhanlder">委托</param> /// <param name="e">checknodeeventargs</param> public static void disabledsetcheckbox(this treelistnode tree, predicate<treelistnode> conditionhanlder, checknodeeventargs e) { if (conditionhanlder(e.node)) { e.cancheck = false; } }
使用示例如下:
/// <summary> /// customdrawnodecheckbox事件 /// </summary> void lhtree_customdrawnodecheckbox(object sender, customdrawnodecheckboxeventargs e) { e.node.disabledcheckbox(disablenodecheckboxrule, e); } /// <summary> /// beforechecknode事件 /// </summary> void lhtree_beforechecknode(object sender, checknodeeventargs e) { e.node.disabledsetcheckbox(disablenodecheckboxrule, e); } /// <summary> /// disable treelistnode规则 /// </summary> /// <param name="node"></param> /// <returns></returns> private bool disablenodecheckboxrule(treelistnode node) { bool _disable = false; if (oplampcfglist.count > 0) { string _cabid = oplampcfglist[0].cabid; nodetype _curtype = node.getnodetype(); if (_curtype == nodetype.lamp)//当节点是灯类型且父节点keyid等于_cabid时候,屏蔽checkbox { _disable = node.parentnode.parentnode.getkeyid().equals(_cabid); } if (_curtype == nodetype.pole)//当节点是杆类型且父节点keyid等于_cabid时候,屏蔽checkbox { _disable = node.parentnode.getkeyid().equals(_cabid); } if (_curtype == nodetype.cab && node.getkeyid().equals(_cabid))//当节点是箱类型keyid等于_cabid时候,屏蔽checkbox { _disable = true; } if (_curtype == nodetype.area || _curtype == nodetype.cabsgrouproot)//当节点类型等于地域或者根节点时候,屏蔽checkbox { _disable = true; } } return _disable; }
代码运行效果如下:
希望本文代码能对大家有所帮助!
如对本文有疑问, 点击进行留言回复!!
使用Visual Studio2019创建C#项目(窗体应用程序、控制台应用程序、Web应用程序)
C#实现获取本地内网(局域网)和外网(公网)IP地址的方法分析
网友评论