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

[AU3基础] [已解决]请教listview如何实现按CTRL多选

  [复制链接]
发表于 2010-8-10 01:08:09 | 显示全部楼层 |阅读模式
本帖最后由 itljl 于 2010-8-18 12:28 编辑

也就是listview控件,当按住CTRL键后,可以实现用鼠标多次点选几行,并且,如何得到点选的这行的数据?
翻遍帮助和互联网也没有答案。
谢谢
发表于 2010-8-10 01:10:37 | 显示全部楼层
本帖最后由 afan 于 2010-8-10 01:16 编辑

A1: 添加 $lvs_report 样式
A2: _GUICtrlListView_GetItemTextxxx
发表于 2010-8-10 02:09:17 | 显示全部楼层
本帖最后由 C.L 于 2010-8-10 02:12 编辑

以前写过的例子,给你参考,可以按Ctrl+鼠标多选,可以直接鼠标拖选,提取选中项目,请看ListView 部份:
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
;~ #include <array.au3>
#include <file.au3>

$Form1 = GUICreate("test", 400, 380, @DesktopWidth / 2 - 100, @DesktopHeight / 2 - 100)
$aStyles = BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES)
$listview1 = GUICtrlCreateListView("名称", 0, 0, 398, 290, BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($listview1, $aStyles)
_GUICtrlListView_SetView($listview1, "1")
GUICtrlSetBkColor($listview1, 0xffffff)
$button1 = GUICtrlCreateButton ("选定目标",200,330,100,30)
GUISetState(@SW_SHOW)

$curdir = FileSelectFolder ("选择目录","")
If StringRight ($curdir,1) <> "" Then $curdir &= ""
$folder = _FileListToArray($curdir, "*", 0)
If IsArray($folder) Then
        For $i=0 To $folder[0]
                $listteam = GUICtrlCreateListViewItem ($folder[$i],$listview1)
                $attrib = FileGetAttrib ($curdir&$folder[$i])
                If StringInStr($attrib, "D")  Then
                        GUICtrlSetImage($listteam, "shell32.dll", 5)
                Else
                        GUICtrlSetImage($listteam, "shell32.dll", 1)
                EndIf
        Next
        WinSetTitle ("test","","test  " & $curdir)
EndIf
While 1
        $nMsg = GUIGetMsg ()
        Switch $nMsg
                Case -3
                        Exit
                Case $button1
                        $totalnum = _GUICtrlListView_GetItemCount($listview1)
                        $selectcount = _GUICtrlListView_GetSelectedCount($listview1)
                        $out = ""
                        For $i = 0 To $totalnum-1
                                If  $selectcount Then
                                        If _GUICtrlListView_GetItemSelected($listview1, $i) == True Then
                                                $val = _GUICtrlListView_GetItemTextString($listview1, $i)
                                                $attrib = FileGetAttrib ($curdir&$val)
                                                If StringInStr($attrib, "D")  Then
                                                        $out &= $val&"   是目录"&@CRLF 
                                                Else
                                                        $out &= $val&"   是文件" & @CRLF 
                                                EndIf
                                        EndIf
                                Else
                                        $out = "没有选择文件"
                                EndIf
                        Next
                        MsgBox (0,"已选择的文件","当前的目录:"&$curdir & @CRLF & $out)
        EndSwitch        
WEnd
 楼主| 发表于 2010-8-10 15:03:55 | 显示全部楼层
回复 2# afan


     谢谢,请问您好是如何知道 $lvs_report 这个样式可以多选的?我也看遍了帮助,但帮助中说这个是“这个样式指定控件显示为报告样式”始终不明白。
 楼主| 发表于 2010-8-10 15:03:59 | 显示全部楼层
回复 3# C.L


         谢谢,请问您好是如何知道 $lvs_report 这个样式可以多选的?我也看遍了帮助,但帮助中说这个是“这个样式指定控件显示为报告样式”始终不明白。
发表于 2010-8-10 15:23:44 | 显示全部楼层
回复 5# itljl

前人的经验,这个样式我也是看别人的代码得知的,说实在的,帮助里面的样式我真没有看得太多,很多技巧都是看别人的经典代码后得知,而且帮助是固定的,有很多的技巧可能都不能一一在帮助里得到,多看其他高手们写出的代码,往往有些地方会有想不到的收获。
 楼主| 发表于 2010-8-10 16:20:44 | 显示全部楼层
回复 6# C.L

谢谢,原来如此。。
发表于 2010-8-12 13:22:06 | 显示全部楼层
LZ 请将 “解决鸟” 改为 “已解决”,规范关键字便于搜索
发表于 2011-2-23 10:18:55 | 显示全部楼层
留名待查  留名待查  留名待查  留名待查
发表于 2011-2-26 22:28:01 | 显示全部楼层
学习了;三楼的例子很棒
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-21 00:21 , Processed in 0.082154 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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