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

[GUI管理] 【已解决】如何实现TreeView项目单选?

[复制链接]
发表于 2023-9-20 00:57:55 | 显示全部楼层 |阅读模式
本帖最后由 277203359 于 2023-9-20 13:15 编辑


#include <GuiTreeView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Local $sTest
Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
$hGUI = GUICreate("Treeview", 400, 300)
$Treeview = GUICtrlCreateTreeView(2, 2, 180, 294, $iStyle, $WS_EX_CLIENTEDGE)
$Fonts1 = GUICtrlCreateTreeViewItem("项目1", $Treeview)
GUICtrlCreateTreeViewItem("项目1-1", $Fonts1)
GUICtrlCreateTreeViewItem("项目1-2", $Fonts1)
GUICtrlCreateTreeViewItem("项目1-3", $Fonts1)
GUICtrlSetState($Fonts1, $GUI_EXPAND)
$Fonts2 = GUICtrlCreateTreeViewItem("项目2", $Treeview)
GUICtrlCreateTreeViewItem("项目2-1", $Fonts2)
GUICtrlCreateTreeViewItem("项目2-2", $Fonts2)
GUICtrlCreateTreeViewItem("项目2-3", $Fonts2)
GUICtrlSetState($Fonts2, $GUI_EXPAND)
$Button1 = GUICtrlCreateButton("获取", 264, 96, 75, 25, $WS_GROUP)
GUISetState()

While 1
        Switch GUIGetMsg()
                Case - 3
                        Exit
                Case $Button1 
                        $sTest = ''
                        For $i = 4 To 11
                                If BitAND(GUICtrlRead($i), $GUI_CHECKED) Then $sTest &= _GUICtrlTreeView_GetText($Treeview, $i) & @CRLF
                        Next
                        MsgBox(0, '被选项目文本', $sTest)
         EndSwitch
WEnd

本帖子中包含更多资源

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

×
发表于 2023-9-20 09:58:15 | 显示全部楼层
277203359 发表于 2023-9-20 09:07
开始也是使用清除的方式考虑的,但是不知道怎么Case复选框打钩
另外,TreeView可以用Radio吗 ...

1.添加TreeViewItem时用for to定义每一个数据的变量,判断的时候再用item[0] to [n]
2.整个改成Radio
3.用ListVeiw,这个也是单选的
发表于 2023-9-20 08:02:20 | 显示全部楼层
点击时先清除整组的选中再选这个???

另外单选用Radio是不是更好一些???
 楼主| 发表于 2023-9-20 09:07:27 | 显示全部楼层
邪恶海盗 发表于 2023-9-20 08:02
点击时先清除整组的选中再选这个???

另外单选用Radio是不是更好一些???

开始也是使用清除的方式考虑的,但是不知道怎么Case复选框打钩
另外,TreeView可以用Radio吗?可以也行,希望赐教。
 楼主| 发表于 2023-9-20 13:13:45 | 显示全部楼层
邪恶海盗 发表于 2023-9-20 09:58
1.添加TreeViewItem时用for to定义每一个数据的变量,判断的时候再用item[0] to [n]
2.整个改成Radio
3. ...

感谢指教,但是我还是用了最笨的方法解决。
#include <GUIConstantsEx.au3>
#include <TreeViewConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 387, 437, 845, 387)

Local $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)

$TreeView1 = GUICtrlCreateTreeView(0, 32, 377, 393,$iStyle)

$TreeView1_1=GUICtrlCreateTreeViewItem("项目",$TreeView1)
$TreeView1_1_1=GUICtrlCreateTreeViewItem("项目1",$TreeView1_1)
$TreeView1_1_2=GUICtrlCreateTreeViewItem("项目2",$TreeView1_1)
$TreeView1_1_3=GUICtrlCreateTreeViewItem("项目3",$TreeView1_1)

$TreeView1_2=GUICtrlCreateTreeViewItem("项目",$TreeView1)
$TreeView1_2_1=GUICtrlCreateTreeViewItem("项目1",$TreeView1_2)
$TreeView1_2_2=GUICtrlCreateTreeViewItem("项目2",$TreeView1_2)
$TreeView1_2_3=GUICtrlCreateTreeViewItem("项目3",$TreeView1_2)

GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $TreeView1_1_1
                        GUICtrlSetState($TreeView1_1_1, $GUI_CHECKED)
                        GUICtrlSetState($TreeView1_1_2, $GUI_UNCHECKED)
                        GUICtrlSetState($TreeView1_1_3, $GUI_UNCHECKED)
                Case $TreeView1_1_2
                        GUICtrlSetState($TreeView1_1_1, $GUI_UNCHECKED)
                        GUICtrlSetState($TreeView1_1_2, $GUI_CHECKED)
                        GUICtrlSetState($TreeView1_1_3, $GUI_UNCHECKED)                        
                Case $TreeView1_1_3
                        GUICtrlSetState($TreeView1_1_1, $GUI_UNCHECKED)
                        GUICtrlSetState($TreeView1_1_2, $GUI_UNCHECKED)
                        GUICtrlSetState($TreeView1_1_3, $GUI_CHECKED)                                
        EndSwitch
WEnd
发表于 2023-9-20 14:43:21 | 显示全部楼层
277203359 发表于 2023-9-20 13:13
感谢指教,但是我还是用了最笨的方法解决。

一会afan看到了会喷的,不过我觉得能正常运行就行...
发表于 2023-9-20 16:03:53 | 显示全部楼层
邪恶海盗 发表于 2023-9-20 14:43
一会afan看到了会喷的,不过我觉得能正常运行就行...

LZ 都解决了,说明够用了,不就欧了~
发表于 2023-9-20 16:25:28 | 显示全部楼层
afan 发表于 2023-9-20 16:03
LZ 都解决了,说明够用了,不就欧了~

你给来个高效的呗,展现一个优化80%代码的实力让我们学习下...
发表于 2023-9-20 18:51:16 | 显示全部楼层
邪恶海盗 发表于 2023-9-20 16:25
你给来个高效的呗,展现一个优化80%代码的实力让我们学习下...

如果只有这几条项目,那没什么优化的。如果项目有几千几万那优化代码及效率90%都没问题。
比如一个方案:点击后勾选点击项并记录该项,下次点击时先取消该项勾选即可。
发表于 2023-9-20 19:44:33 | 显示全部楼层
afan 发表于 2023-9-20 18:51
如果只有这几条项目,那没什么优化的。如果项目有几千几万那优化代码及效率90%都没问题。
比如一个方案 ...

有道理啊...


============
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-2 12:40 , Processed in 0.080711 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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