选中checkbox的全选,把listview中的checkbox都选中的算法【已解决】
本帖最后由 xwt620 于 2011-10-11 21:01 编辑RT,点击一个checkbox,则把listview里的所有的checkbox都设置为选中或取消,我以前喜欢用for循环方式来解决问题,想请教下有没有比这种更好,效率更高的方法。 本帖最后由 pusofalse 于 2011-10-2 21:46 编辑
用for应该是合理的,ListView控件没有提供 一次全选的消息命令。另外,使用这种方法的效率是否高效,还要看在for循环内部的语句是怎样写的。 如果Item数量较多,应该在for之前使用 _GUICtrlListView_BeginUpdate函数暂停ListView控件的重绘,在for之后调用_GUICtrlListView_EndUpdate解除锁定,一旦使用了这两个函数,那在for循环之内,就没必要使用_GUICtrlListView_GetItemChecked来进行判断,应该直接调用_GUICtrlListView_SetItemChecked函数。
如果在调用_GUICtrlListView_SetItemChecked函数时,ListView控件向父窗口发送WM_NOTIFY消息,那么在for之前也应该用GUIRegisterMsg($WM_NOTIFY, "")来取消截取WM_NOTIFY消息,这样 消息函数就不会执行,效率也会因此提升,全部选中之后,再在for之后使用GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") 来重新注册WM_NOTIFY。 用for应该是合理的,ListView控件没有提供 一次全选的消息命令。另外,使用这种方法的效率是否高效,还要看 ...
pusofalse 发表于 2011-10-2 21:44 http://www.autoitx.com/images/common/back.gif
为什么总有人说AU3的程序容易出错,还是功力不够,谢谢分享。 RT,点击一个checkbox,则把listview里的所有的checkbox都设置为选中或取消,我以前喜欢用for循环方式来解决 ...
xwt620 发表于 2011-10-2 21:22 http://www.autoitx.com/images/common/back.gif
好象不差这点效率吧,除非你的Items上十万级,对于几百个item而言,都是毫秒级的。
对了,LV最大Items数限制是多少个? 回复 2# pusofalse
学习了,感谢P版! 回复 4# happytc
单独创建好像没见过特殊的限制,如果是数组创建的话,估计是数组的要求,这好像和listview关系不大,没试过,只是猜的 回复happytc
单独创建好像没见过特殊的限制,如果是数组创建的话,估计是数组的要求,这好像和listview关 ...
netegg 发表于 2011-10-4 14:11 http://www.autoitx.com/images/common/back.gif
有的,试了下面的代码,最多只能创建Items数是65530,而数组是1600万个元素。
显然,au3还是把Item当作控件了,因为au3最多只能在每个窗口中的GUI控件的最大数量: 65532
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Example()
Func Example()
Local $listview, $button, $item, $msg
GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)
GUISetBkColor(0x00E0FFFF) ; will change background color
$listview = GUICtrlCreateListView("col1|col2|col3", 10, 10, 200, 150);,$LVS_SORTDESCENDING)
$button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)
For $i = 0 To UBound($item) - 1
$item[$i] = GUICtrlCreateListViewItem("item" & $i & "|col" & $i & "|col" & $i, $listview)
Next
GUICtrlCreateInput("", 20, 200, 150)
GUICtrlSetState(-1, $GUI_DROPACCEPTED) ; to allow drag and dropping
GUISetState()
;GUICtrlSetData($item2, "ITEM1")
;GUICtrlSetData($item3, "||COL33")
;GUICtrlDelete($item1)
Do
$msg = GUIGetMsg()
Select
Case $msg = $button
MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)
Case $msg = $listview
MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)
EndSelect
Until $msg = $GUI_EVENT_CLOSE
EndFunc
回复 7# happytc
这倒是没注意过
页:
[1]