itljl 发表于 2010-8-10 01:08:09

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

本帖最后由 itljl 于 2010-8-18 12:28 编辑

也就是listview控件,当按住CTRL键后,可以实现用鼠标多次点选几行,并且,如何得到点选的这行的数据?
翻遍帮助和互联网也没有答案。
谢谢

afan 发表于 2010-8-10 01:10:37

本帖最后由 afan 于 2010-8-10 01:16 编辑

A1: 添加 $lvs_report 样式
A2: _GUICtrlListView_GetItemTextxxx

C.L 发表于 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
                $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

itljl 发表于 2010-8-10 15:03:55

回复 2# afan


   谢谢,请问您好是如何知道 $lvs_report 这个样式可以多选的?我也看遍了帮助,但帮助中说这个是“这个样式指定控件显示为报告样式”始终不明白。

itljl 发表于 2010-8-10 15:03:59

回复 3# C.L


         谢谢,请问您好是如何知道 $lvs_report 这个样式可以多选的?我也看遍了帮助,但帮助中说这个是“这个样式指定控件显示为报告样式”始终不明白。

C.L 发表于 2010-8-10 15:23:44

回复 5# itljl

前人的经验,这个样式我也是看别人的代码得知的,说实在的,帮助里面的样式我真没有看得太多,很多技巧都是看别人的经典代码后得知,而且帮助是固定的,有很多的技巧可能都不能一一在帮助里得到,多看其他高手们写出的代码,往往有些地方会有想不到的收获。

itljl 发表于 2010-8-10 16:20:44

回复 6# C.L

谢谢,原来如此。。

afan 发表于 2010-8-12 13:22:06

LZ 请将 “解决鸟” 改为 “已解决”,规范关键字便于搜索

sdc7 发表于 2011-2-23 10:18:55

留名待查留名待查留名待查留名待查

502762378 发表于 2011-2-26 22:28:01

学习了;三楼的例子很棒
页: [1]
查看完整版本: [已解决]请教listview如何实现按CTRL多选