277203359 发表于 2023-9-20 00:57:55

【已解决】如何实现TreeView项目单选?

本帖最后由 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 to
2.整个改成Radio
3.用ListVeiw,这个也是单选的

邪恶海盗 发表于 2023-9-20 08:02:20

点击时先清除整组的选中再选这个???

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

277203359 发表于 2023-9-20 09:07:27

邪恶海盗 发表于 2023-9-20 08:02
点击时先清除整组的选中再选这个???

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

开始也是使用清除的方式考虑的,但是不知道怎么Case复选框打钩:face (13):
另外,TreeView可以用Radio吗?可以也行,希望赐教。

277203359 发表于 2023-9-20 13:13:45

邪恶海盗 发表于 2023-9-20 09:58
1.添加TreeViewItem时用for to定义每一个数据的变量,判断的时候再用item to
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看到了会喷的,不过我觉得能正常运行就行...:face (1):

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%代码的实力让我们学习下...:face (23):

afan 发表于 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%都没问题。
比如一个方案 ...

有道理啊...


============
页: [1]
查看完整版本: 【已解决】如何实现TreeView项目单选?