当前位置: 代码迷 >> PB >> 树形控件怎么实现全选,
  详细解决方案

树形控件怎么实现全选,

热度:62   发布时间:2016-04-29 08:08:07.0
树形控件如何实现全选,急!急!
树型控件写了个递归函数,实现了全选,可是如果函数放在clicked事件中,则在点击“+”展开的时候也会触发该函数,如果放在selectionchanged里,由于oldhandle和newhandle没变不会触发该函数,树形控件有相关的checkbox事件吗?求教高手,急!

------解决方案--------------------
树形控件没有相关的checkbox的事件。我的解决方法是在clicked事件中,通过鼠标点击的位置来判断是否点击的checkbox位置。下面是我使用的代码,你可能要调整下里面的数值

// 获取点击的X坐标
lx = UnitsToPixels(PointerX(), XUnitsToPixels!) 
// 计算CheckBox所在的X坐标
If This.Linesatroot Then 
lx1 = ltvi_Node.level * 19 
Else 
lx1 = (ltvi_Node.level - 1) * 19 
End If 

------解决方案--------------------
你在clicked加个判断是否是点击checkbox处了。
Function integer getiteminfo(long hWnd, long uMsg, long wParam, REF TVHITTESTINFO tv) library "user32.dll" Alias For "SendMessageA" 

在mousemove事件中加入如下代码:
tvhittestinfo ltvitem
tvitem Item
ltvitem.pt.xx = UnitsToPixels (xpos, XUnitsToPixels! )
ltvitem.pt.yy = UnitsToPixels (ypos, YUnitsToPixels! )
getiteminfo(handle(this),4369,0,ltvitem)
IF ltvitem.hItem = 0 then return
ib_ischeckboxes = (ltvitem.flags = 64 ) 

在clicked事件中判断ib_ischeckboxes是否为真,如果是代表的是点击到checkbox否则就不是。。这样就不会出现你所说的问题了
  相关解决方案