hur.cn - 华软网

 热门搜索

TreeView控件中的CheckBoxes属性选择变化后的事件如何捕捉

  作者:未知    来源:网络    更新时间:2018/2/6
同上.
我想写代码在其中.
------华软网友回答------
Specifies whether the state images are replaced by check boxes. The check boxes are set to unchecked by default. The TreeView control will process mouse and keyboard input to toggle the checked state. Values are:TRUE - Check boxes are displayed.FALSE - Check boxes are not displayed.

上面是关于treeview的CheckBox属性的解释,treeview控件将处理鼠标和键盘输入来改变是否选中的状态,所以我认为可以用click事件  + pbm_keydown事件中去判断选中状态。
------华软网友回复------
不是很理想。
比如,在clicked,DoubleClicked,SelectionChanged,SelectionChanging 事件通过return i 来阻断这些事件进程,而对checkedbox的选择与否操作没有影响即点一下checkedbox其改变值。显然这不合符用户意愿,用户都希望,不想改变checkedbox值时,不希望点一下checkedbox就改变值。
------华软网友回复------
现在常用的方法是通过修改statepicture的方式来进行控制,就是把statepicture设置打勾的图片或空心的图片。


------华软网友回复------
两个结构
os_point 
  long l_x
  long l_y
os_tvhittestinfo
  long l_flags
  long l_hitem
  os_point str_pt

Public:
Constant UInt TVM_HITTEST = 4369
Constant UInt TVHT_ONITEMSTATEICON = 64

Protected:
Boolean ib_stateclick      //是否点击状态


Function Long HitMsg(Long hWindow, UInt Msg, Long wParam,  Ref os_tvhittestinfo lParam) Library 'user32.dll' Alias for SendMessageA

mousemove事件中
os_tvhittestinfo lstr_tvhittest

lstr_tvhittest.str_pt.l_x = UnitsToPixels(xpos, XUnitsToPixels!)
lstr_tvhittest.str_pt.l_y = UnitsToPixels(ypos, YUnitsToPixels!)

//确定是否是点击状态
HitMsg(il_handle, TVM_HITTEST, 0, lstr_tvhittest)

IF lstr_tvhittest.l_hItem <> 0 THEN
ib_stateclick = (lstr_tvhittest.l_flags = TVHT_ONITEMSTATEICON)
END IF

然后在clicked事件中通过判断ib_stateclick来进行控制。
------华软网友回复------
我刚讲过在clicked事件中只写阻断clicked事件的代码,checkedbox的值也会在你点这个checkedbox框时激活
所以,以上各位不知你明白的意思没有,以上各位的办法都不理想。
如果有API来直接改更好
------华软网友回复------
treeview本身的checkbox不好用地,

好象没有任何事件能阻止它触发,考虑 luotitan(泰坦) 的方法,
或者api
------华软网友回复------
泰坦也有星星了哦!不放点分?
------华软网友回复------
用luotitan(泰坦) ( )的方法,我当时也碰到过这个问题就是用类似的方法搞定的。其它的方法全不理想。
我当时用200分求这个问题都没有人直接搞定,最后还是让我自已上网下人家的例子搞定的。
PB版像 luotitan(泰坦) 这样的高手太少了。唉!
我再提出一个问题吧?看有没有能够搞定。
数据窗口控件中,松开“CTRL”执行一段代码,怎么搞。提供自定义事件ID,API都行?
------华软网友回复------
研究了一段时间总算搞定了,其实根本不用阻止它触发,而是利用这一特性来写代码.泰坦的办法不错,而且还要补写不少代码。
如果是泰坦自已写的那段代码,我就多放分,如果是网上COPY的我就大家都放点分
------华软网友回复------
林子是什么意思?
------华软网友回复------
在里面添加自定义事件keyup ,写代码如下
if key = KeyControl! then _msg('sadf')
------华软网友回复------
用luotitan(泰坦)( )的方法最理想
------华软网友回复------
我也是用的泰坦的方法,以前在pb创新网上下过一个例子!
------华软网友回复------
我还是不明白那个函数的意思,Function Long HitMsg(Long hWindow, UInt Msg, Long wParam,  Ref os_tvhittestinfo lParam) Library 'user32.dll' Alias for SendMessageA。
我定义函数是提示语法错误。我直接把Library 'user32.dll' Alias for SendMessageA放在画板,应该怎么写,如果有时间请详细告诉我一下,我太菜了。嘿嘿。
还有定义Public:
Constant UInt TVM_HITTEST = 4369
Constant UInt TVHT_ONITEMSTATEICON = 64

Protected:
Boolean ib_stateclick      //是否点击状态
是什么意思。
我现在用了一个有点漏洞的办法,不过运行每问题,但不正规。是这样的:
我在click事件取出当前statepicindex1,写上time(0.01),在timer事件里先终止timer事件timer(0),再取出当前statepicindex2,比较statepicindex1<>statepicindex2,就可以判断statepicindex是不是改变了,不是很正规,但是能用。
我还是希望知道luotitan(泰坦)的方法,如果有空,请给我解释一下好吗,谢谢!!
------华软网友回复------
顶一下      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。