关于TreeView的$TVS_CHECKBOXES问题
在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 编辑 ] 你想只在点击前面的选择框才触发事件,点击后面的文本则不动作?恐怕做不到,选择框和文本是同一控件,事件同时适用于两者。
如果是Checkbox控件,可以把后面的文本单独列为Label来解决。 补充,TreeViewItem好像是点击文本不会改变checked状态,你可以用检测checked来触发事件。
case $msg=$item
改为
case GUICtrlRead($item) = $GUI_CHECKED
case GUICtrlRead($item) = $GUI_UNCHECKED
[ 本帖最后由 sensel 于 2009-4-3 15:38 编辑 ]
回复 3# sensel 的帖子
多谢问题解决了 不过 GUICtrlRead($item)不是等于 $GUI_CHECKED ,$GUI_UNCHECKED而是 选中的时候值是257 没选中的时候值是 260。。。 问题解决就好。不过不要直接用数值。
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) 我还是不明白呢 留个记号! #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
页:
[1]