PB树形控件勾选联动

PB 专栏收录该内容
1 篇文章 0 订阅

做PB树形控件的时候需要勾选联动,从网上找了个方案,但是对向上勾选支持的不是很好,自己做了点优化,希望可以帮到别人

首先treeview需要勾选 checkboxes属性

在tv_1.clicked事件中增加代码

TreeViewItem ltvitem
getitem(handle, ltvitem)

post event ue_statechanged(handle, ltvitem.statepictureindex)

在树形控件中新增函数 ue_statechanged(long handle,integer prevstate)   代码如下

treeviewitem ltvi_item
getitem(handle, ltvi_item)

if ltvi_item.statepictureindex = prevstate then
    return
else
    this.Event ue_synchronizechildren(handle,ltvi_item.statepictureindex)    //这个函数包含了向下的选中和取消
    this.Event ue_synchronizeparent(handle,ltvi_item.statepictureindex)       //优化了这个函数
end if

在树形控件新增函数 ue_synchronizechildren(long handle,integer state) 代码如下

long ll_childitem
treeviewitem ltvi_item
getitem(handle, ltvi_item)
ltvi_item.statepictureindex = state
setitem(handle, ltvi_item)
ll_childitem = this.finditem(ChildTreeItem!, handle)
do while(ll_childitem <> -1)
    this.Event ue_synchronizechildren(ll_childitem, state) //递归遍历后代结点
    ll_childitem = this.finditem(NextTreeItem!, ll_childitem)
loop

在树形控件新增函数 ue_synchronizeparent(long handle,integer state) 代码如下

long ll_parentitem,ll_nextitem
treeviewitem ltvi_item,ltvi_nextitem
this.getitem(handle, ltvi_item)
ltvi_item.statepictureindex = state
this.setitem(handle, ltvi_item)
if state = 1 then
    ll_parentitem = this.finditem(ParentTreeItem!, handle)
    if ll_parentitem > 0 then
        this.getitem(ll_parentitem, ltvi_item)
        ltvi_item.statepictureindex = state
        this.Event ue_synchronizeparent(ll_parentitem, state)
    else
        return
    end if
else
    ll_nextitem = this.finditem(NextTreeItem!, handle) //同层下一项
    do while(ll_nextitem <> -1)
        getitem(ll_nextitem, ltvi_nextitem)
        if ltvi_nextitem.statepictureindex = 1 then return //有没选中,就返回!
        ll_nextitem = this.finditem(NextTreeItem!, ll_nextitem)
    loop
    ll_nextitem = this.finditem(previoustreeItem!, handle) //同层上一项
    do while(ll_nextitem <> -1)
        getitem(ll_nextitem, ltvi_nextitem)
        if ltvi_nextitem.statepictureindex = 1 then return //有没选中,就返回!
        ll_nextitem = this.finditem(previoustreeItem!,ll_nextitem)
    loop
    ll_parentitem = this.finditem(ParentTreeItem!, handle)
    if ll_parentitem > 0 then
        this.getitem(ll_parentitem, ltvi_item)
        ltvi_item.statepictureindex = state
        this.Event ue_synchronizeparent(ll_parentitem, state)
    else
        return
    end if
end if
this.Event ue_synchronizeparent(ll_parentitem,state)


这样这个树形控件可以更完美的实现勾选功能,代码基于前辈代码做的优化,具体出处现在找不到了,感谢






  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值