skyfree 发表于 2008-8-27 16:04:59

关于TreeView的问题,望指教!



为了方便描述,我使用了UDF里的一个范例程序并截图

我的问题是:上图中,如何做到在我单击选中了“ New Item”后,其子项则全部处于选中状态?如下图这样:



[ 本帖最后由 skyfree 于 2008-8-28 18:19 编辑 ]

clonecd 发表于 2008-8-28 16:04:42

这是我以前刚学au3的时候写的,我去掉了一些代码,以便更好地说明你的问题,你再自己整理一下吧。
#NoTrayIcon
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <TreeViewConstants.au3>
#include <StaticConstants.au3>
AutoItSetOption("WinTitleMatchMode", -4)
Global $treeview, $fonts, $font1, $font2, $font3, $papers, $paper1, $paper2, $paper3, $Install, $Cancel, $msg
GUICreate("安装字体 -- Mo Hong", 260, 210)
GUICtrlCreateLabel("请勾选您想要安装的组件:", 40, 15)
$treeview = GUICtrlCreateTreeView(40, 35, 180, 120, BitOR($TVS_HASBUTTONS, $TVS_CHECKBOXES, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS), $WS_EX_CLIENTEDGE)
$fonts = GUICtrlCreateTreeViewItem("字体", $treeview)
$font1 = GUICtrlCreateTreeViewItem("仿宋_GB2312", $fonts)
GUICtrlSetState(-1, $GUI_CHECKED)
$font2 = GUICtrlCreateTreeViewItem("经典黑体", $fonts)
GUICtrlSetState(-1, $GUI_CHECKED)
$font3 = GUICtrlCreateTreeViewItem("楷体_GB2312", $fonts)
GUICtrlSetState($fonts, $GUI_EXPAND)

GUICtrlCreateLabel("", 0, 165, 260, 2, $SS_SUNKEN)
$Install = GUICtrlCreateButton("安装(&I)", 40, 175, 80, 25, $BS_DEFPUSHBUTTON)
GUICtrlSetState(-1, $GUI_FOCUS)
$Cancel = GUICtrlCreateButton("取消(&C)", 140, 175, 80, 25)
GUISetState()
While 1
    Switch GUIGetMsg()
      Case $Cancel, $GUI_EVENT_CLOSE
            Exit
                Case $fonts
                        If BitAnd(GUICtrlRead($fonts),$GUI_CHECKED) Then
                                GUICtrlSetState($font1, $GUI_CHECKED)
                GUICtrlSetState($font2, $GUI_CHECKED)
                                GUICtrlSetState($font3, $GUI_CHECKED)
            ElseIf BitAnd(GUICtrlRead($fonts),$GUI_UNCHECKED) Then
                GUICtrlSetState($font1, $GUI_UNCHECKED)
                GUICtrlSetState($font2, $GUI_UNCHECKED)
                                GUICtrlSetState($font3, $GUI_UNCHECKED)
                EndIf
      Case $font1, $font2, $font3
            If BitAnd(GUICtrlRead($font1),$GUI_UNCHECKED) Or BitAnd(GUICtrlRead($font2),$GUI_UNCHECKED) Or BitAnd(GUICtrlRead($font3),$GUI_UNCHECKED) Then
                GUICtrlSetState($fonts, $GUI_UNCHECKED)
                        ElseIf BitAnd(GUICtrlRead($font1),$GUI_CHECKED) And BitAnd(GUICtrlRead($font2),$GUI_CHECKED) And BitAnd(GUICtrlRead($font3),$GUI_CHECKED) Then
                GUICtrlSetState($fonts, $GUI_CHECKED)
                        EndIf
    EndSwitch
WEnd


[ 本帖最后由 clonecd 于 2008-8-28 16:06 编辑 ]

clonecd 发表于 2008-8-28 16:21:20

由于我去掉了一些代码,所以上面现有代码有些可能是多余的,你自己去掉吧。

skyfree 发表于 2008-8-28 18:19:04

呵呵,虽然和我的要求有所差别,但是我还是谢谢你

关于这个问题我已经用循环+判断强行解决了

qq342252004 发表于 2009-12-20 12:51:12

楼主说的循环+判断强行解决这个问题, 能给个例子出来吗?

judyzhai 发表于 2010-6-11 17:38:46

看看看啊1111

hollandmfq 发表于 2014-5-6 12:36:42

雷锋精神传天下!谢谢分享!

nqawen 发表于 2014-7-15 15:17:13

哈哈,,原来S大也碰到了这个问题
页: [1]
查看完整版本: 关于TreeView的问题,望指教!