找回密码
 加入
搜索
查看: 10397|回复: 9

[图形处理] treeview怎么实现点击文字同时也选中复选框?点击复选框和文字的效果一样?[已解决]

  [复制链接]
发表于 2012-7-25 16:50:16 | 显示全部楼层 |阅读模式
本帖最后由 kinghu318 于 2012-7-30 08:30 编辑

treeview 中,是通过复选框的形式进行显示的,现在可以通过文本选中复选框或者通过点击复选框进行选择,但是两者结合起来就无法实现效果,大家有什么好的办法吗?谢谢!!
$ck=_GUICtrlTreeView_GetSelection($TreeView1)
                        
                        ;MsgBox(0,"",$ck)
                        If _GUICtrlTreeView_GetChecked($TreeView1,$ck) Then ;//选中
                                _GUICtrlTreeView_SetChecked($treeview1,$ck,False)                        
                        MsgBox(0,"",1) 
                        Else;If Not _GUICtrlTreeView_GetChecked($TreeView1,$ck)
                                _GUICtrlTreeView_SetChecked($treeview1,$ck,True)
                                MsgBox(0,"",2)
                        EndIf
我是通过判断项的选中状态进行判断,但是好像复选框的事件执行先于我的判断,在我的判断之前复选框的点击事件已经执行了。。。。
发表于 2012-7-25 19:28:02 | 显示全部楼层
不明白什么能同时点中文本和复选框
 楼主| 发表于 2012-7-26 08:50:14 | 显示全部楼层
回复 2# yhxhappy



treeview默认的情况是点击文本是不会选中复选框的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-7-26 21:14:39 | 显示全部楼层
#include <GuiConstantsEx.au3>
#include <TreeviewConstants.au3>
#include <Array.au3>
#include <WindowsConstants.au3>
#include <GuiTreeView.au3>


Local $TreeItem[1]

$GUI = GUICreate("树视图(TreeView) UDF 函数演示", 400, 300)

$hTreeView = GUICtrlCreateTreeView(2, 2, 396, 268, $TVS_CHECKBOXES+$TVS_HASLINES, $TVS_NOSCROLL)
GUISetState()


$hItem = GUICtrlCreateTreeViewItem("主项", $hTreeView)
_ArrayAdd($TreeItem, $hItem)
For $y = 1 To 10
        $Item = GUICtrlCreateTreeViewItem("子项" & $y, $hItem)
        _ArrayAdd($TreeItem, $Item)
Next
$TreeItem[0] = UBound($TreeItem)-1
GUICtrlSetState($hItem, $GUI_EXPAND+$GUI_DEFBUTTON)                                ;展开父项

$TreePos = ControlGetPos($GUI, "", $hTreeView)                                                 ;取TREE控件坐标


; 循环到用户退出
While 1
        $nMsg = GUIGetMsg(1)
        Switch $nMsg[0]
        Case $TreeItem[1] To $TreeItem[$TreeItem[0]]
                $x = _GUICtrlTreeView_DisplayRect($hTreeView,  $nMsg[0], True)                ;取点击项文本框的坐标
                If $nMsg[3]-$TreePos[0] >= $x[0] Then                                                                ;如果点击的坐标小于文本框X坐标,说明点击在CHECKBOX上,反之点击在文本上
                        If BitAnd(GUICtrlRead($nMsg[0]), $GUI_CHECKED) Then
                                GUICtrlSetState($nMsg[0], $GUI_UNCHECKED)
                        Else
                                GUICtrlSetState($nMsg[0], $GUI_CHECKED)
                        EndIf
                EndIf
        Case $GUI_EVENT_CLOSE
                Exit
        EndSwitch
WEnd

评分

参与人数 1金钱 +40 收起 理由
kinghu318 + 40 非常感谢

查看全部评分

 楼主| 发表于 2012-7-30 08:29:16 | 显示全部楼层
回复 4# yhxhappy


    非常感谢要的就是这个效果
发表于 2013-11-28 10:13:39 | 显示全部楼层
有用 收藏了
发表于 2013-11-28 10:14:07 | 显示全部楼层
有用 收藏了
发表于 2014-7-12 09:37:18 | 显示全部楼层
谢谢分享,很有用!
发表于 2014-7-14 18:05:34 | 显示全部楼层
学习了,,正为这个发愁
发表于 2014-7-30 10:21:46 | 显示全部楼层
感谢,感谢,来学习了。非常感谢。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-22 22:38 , Processed in 0.084469 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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