欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

DevExpress实现禁用TreeListNode CheckBox的方法

程序员文章站 2024-02-19 08:18:52
很多时候在进行c#项目的实际开发中,会需要根据条件来设置节点不可勾选,查看devexpress文档发现通过其customdrawnodecheckbox和beforeche...

很多时候在进行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;
}

代码运行效果如下:

DevExpress实现禁用TreeListNode CheckBox的方法

希望本文代码能对大家有所帮助!