找回密码
 加入
搜索
查看: 2228|回复: 7

关于TreeView的$TVS_CHECKBOXES问题

[复制链接]
发表于 2009-4-2 16:08:38 | 显示全部楼层 |阅读模式
在TreeView 的 $TVS_CHECKBOXES 风格下
进行事件判断  如何只有选择选择框的时候 才能引发事件

$treeview=GUICtrlCtreateTreeView(6,6,390,150,BitOr($TVS_HASBUTTONS,.....,$TVS_CHECKBOXES),$WS_CLIERNTEDGE)
$item=GUICtrlCreateTreeViewItem("first",$treeview)
GUISetState()
while 1
$msg=GUIGetMsg()
select
case $msg=i$tem
MsgBox(0,0,"event first is occur"
case $msg=$GUI_EVENT_CLOSE
Exiteloop
EndSelect
WEnd
GUIDelete()
Exite
这样的话 点击 文本也会触发事件,有没有办法只有选择选择框的时候才出发事件??

[ 本帖最后由 seominho 于 2009-4-7 09:22 编辑 ]
发表于 2009-4-3 15:32:37 | 显示全部楼层
你想只在点击前面的选择框才触发事件,点击后面的文本则不动作?恐怕做不到,选择框和文本是同一控件,事件同时适用于两者。
如果是Checkbox控件,可以把后面的文本单独列为Label来解决。
发表于 2009-4-3 15:34:20 | 显示全部楼层
补充,TreeViewItem好像是点击文本不会改变checked状态,你可以用检测checked来触发事件。
case $msg=$item
改为
case GUICtrlRead($item) = $GUI_CHECKED
case GUICtrlRead($item) = $GUI_UNCHECKED

[ 本帖最后由 sensel 于 2009-4-3 15:38 编辑 ]
 楼主| 发表于 2009-4-7 09:21:37 | 显示全部楼层

回复 3# sensel 的帖子

多谢  问题解决了 不过 GUICtrlRead($item)  不是等于 $GUI_CHECKED ,$GUI_UNCHECKED
而是 选中的时候值是257 没选中的时候值是 260。。。
发表于 2009-4-7 21:43:26 | 显示全部楼层
问题解决就好。不过不要直接用数值。
GUIConstantsEx.au3 里可以看到,$GUI_CHECKED = 1,$GUI_UNCHECKED = 4,$GUI_FOCUS = 256。
你获得的值257=1+256=$GUI_CHECKED+$GUI_FOCUS,因为TreeViewItem返回状态还有一个焦点(就是文本显示为蓝色的那行)。直接用数值257,如果直接点击非焦点(文本白色)选择框,事件将无法触发。
这个问题我上个星期也遇上过,查帮助文件的GUICtrlRead说明找到解决方法,就是利用位与运算BitAND。

Case GUICtrlRead($item) = $GUI_CHECKED
改成
Case BitAND(GUICtrlRead($item), $GUI_CHECKED)
发表于 2010-5-2 20:45:17 | 显示全部楼层
我还是不明白呢
发表于 2010-5-5 15:40:34 | 显示全部楼层
留个记号!
发表于 2010-5-5 15:55:33 | 显示全部楼层
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
#include <StaticConstants.au3>

#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 615, 438, 192, 124)

$TreeView = GUICtrlCreateTreeView(96, 80, 169, 161, BitOR($GUI_SS_DEFAULT_TREEVIEW, $TVS_CHECKBOXES, $TVS_SINGLEEXPAND, $TVS_INFOTIP, $TVS_FULLROWSELECT, $TVS_NOSCROLL, $WS_HSCROLL, $WS_VSCROLL, $WS_BORDER, $WS_CLIPSIBLINGS), BitOR($WS_EX_CLIENTEDGE, $WS_EX_STATICEDGE))

$item = GUICtrlCreateTreeViewItem("first", $TreeView)
GUISetState()
While 1
        $msg = GUIGetMsg()
        Select
                Case BitAND(GUICtrlRead($item), $GUI_CHECKED)
                        MsgBox(0, 0, "event first is occur")
                        ExitLoop
                Case $msg = $GUI_EVENT_CLOSE
                        Exit
        EndSelect
WEnd
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-10-6 10:53 , Processed in 0.083504 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表