关于ListView风格和_GUICtrlListView_CopyItems 的问题 [已解决]
本帖最后由 lin6163 于 2012-11-8 17:14 编辑1 、为什么左边的项移动右边,可以删除源来左边的项
而右边的项不可以移动,到左边,而是变成复制
_GUICtrlListView_CopyItems($hListView, $hListView1 ,1)
感谢 shqf的回答
谢谢
24 行 改为 Global $hListView = GUICtrlGetHandle(GUICtrlCreateListView("", 230, 2, 180, 268))
那么第二问有没有人会知道呢?
解决方法:在第79行后面加上_GUICtrlListView_SetItemSelected($hListView, -1, False)就行了
2 、
这样是选定两项,而_GUICtrlListView_SetExtendedListViewStyle($hListView, $LVS_EX_CHECKBOXES);$LVS_EX_CHECKBOXES 只是使列表视图控件中对于项目的复选框有效
不是只对复选框有效的吗?#Include <GuiListView.au3>
#include <GuiConstantsEx.au3>
;Opt("GUIOnEventMode", 1)
Opt('MustDeclareVars', 1)
$Debug_LV = False ; 检查传递给函数的类名, 设置为真并使用另一控件的句柄观察其工作
_Main()
Func _Main()
Local $button ,$button1 ,$button2 ,$msg ,$sl ,$xm
GUICreate("ListView", 415, 400)
#cs
; 添加框1
Global$hListView = GUICtrlCreateListView("", 2, 2, 180, 268 ,BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
; 添加框2
Global $hListView1 = GUICtrlCreateListView("", 230, 2, 180, 268,BitOR($LVS_SHOWSELALWAYS, $LVS_NOSORTHEADER, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView1, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT))
#ce
; 添加框1
Global$hListView = GUICtrlCreateListView("", 2, 2, 180, 268 )
; 添加框2
Global $hListView1 = GUICtrlCreateListView("", 230, 2, 180, 268)
; 按钮
$button = GUICtrlCreateButton ("发送",170,300,70,20)
$button1 = GUICtrlCreateButton (">>",185,80,40,20)
$button2 = GUICtrlCreateButton ("<<",185,150,40,20)
; GUICtrlSetOnEvent($button1, "_MoveRight")
_GUICtrlListView_SetExtendedListViewStyle($hListView, $LVS_EX_CHECKBOXES);使列表视图控件中对于项目的复选框有效
_GUICtrlListView_SetExtendedListViewStyle($hListView1, $LVS_EX_CHECKBOXES )
; 添加列1
_GUICtrlListView_AddColumn($hListView, "用户名", 80)
_GUICtrlListView_AddColumn($hListView, "IP", 80)
; 添加列2
_GUICtrlListView_AddColumn($hListView1, "用户名", 80)
_GUICtrlListView_AddColumn($hListView1, "IP", 80)
; 添加项
GUICtrlCreateListViewItem("11|22" ,$hListView)
GUICtrlCreateListViewItem("33|44" ,$hListView)
GUICtrlCreateListViewItem("55|66" ,$hListView)
#cs
_GUICtrlListView_AddItem($hListView, "abc", 0)
_GUICtrlListView_AddSubItem($hListView, 0, "192", 1)
_GUICtrlListView_AddItem($hListView, "abc 2", 1)
_GUICtrlListView_AddSubItem($hListView, 1, "192 2", 1)
$sl = _GUICtrlListView_GetColumnCount($hListView1)
For $i = $sl To 0 Step -1
If _GUICtrlListView_GetItemChecked($hListView1, $i) = True Then
_GUICtrlListView_DeleteItem($hListView1, $i)
EndIf
Next
;MsgBox(4160, "Information", "Item : " & _GUICtrlListView_GetItemChecked($hListView, 0))
#ce
GUISetState()
; 选中项目 2
; _GUICtrlListView_SetItemChecked($hListView, 0)
;MsgBox(4160, "Information", "Item : " & _GUICtrlListView_GetItemChecked($hListView, 0))
; 循环至用户退出
Do
$msg = GUIGetMsg ()
Select
Case $msg = $button ;发送
_GUICtrlListView_CopyItems($hListView, $hListView1 ,1)
Case $msg = $button1 ;添加
_GUICtrlListView_CopyItems($hListView, $hListView1 ,1)
Case $msg = $button2 ;删除
_GUICtrlListView_CopyItems($hListView1, $hListView ,1)
EndSelect
Until $msg = $GUI_EVENT_CLOSE
GUIDelete()
EndFunc ;==>_Main
懂的人回一下谢谢 没看明白楼主的意思 就是左边ListView的项能移动到右边ListView
而右边ListView不能移动到左边ListView
是移动
不是复制 还有就是复选框的问题
上面的图
我明明只选 了一个复选框 项
还有一个蓝底项
但结果是两项都有效 本帖最后由 shqf 于 2012-11-6 14:36 编辑
仅针对第1 问。
原代码对旧的项是移动,但对新移动过来的项只能起到复制作用,虽然_GUICtrlListView_CopyItems加上了可选参数1,是复制后删除,就是移动的意思,所以确实存在问题。
解决方法是:
一、$hListView要用句柄,而非控件ID。所以24句改为Global$hListView = GUICtrlGetHandle(GUICtrlCreateListView("", 2, 2, 180, 268 )),同法改27句。可能的原因是这个:need the handle because UDF function(s) are used to create the items。(帮助代码里如此说),虽知中文大意,但不能进一步理解了。期待论坛高人。
二、添加列表视图控件中的项目用_GUICtrlListView_AddItem函数,不要用GUICtrlCreateListViewItem函数。 感谢 shqf的回答 难道没人发现这个问题? 本帖最后由 shqf 于 2012-11-7 15:00 编辑
针对第2问:
你这个可以说不是问题的问题。因为编程不是这样的思路,有点儿不知如何去说清楚。所以论坛一些高手没有给你回答。今天闲得无聊,我凑合着就给你说一下吧。
$LVS_EX_CHECKBOXES 仅是一种样式,用了它,ListView项目里就出面了一个复选框,不用这个属性,就不出现复选框而已。并不是说其他一定要怎样怎样。至于 _GUICtrlListView_CopyItems 运行时会将选中的(不是指复选框打勾)的项目也复制,这跟用不用$LVS_EX_CHECKBOXES没有关系,那是_GUICtrlListView_CopyItems的问题。
其实也不能说是个问题,更好地编程思维应如此认为,这就是_GUICtrlListView_CopyItems的特性。至于你只想让复选框打勾的项目进行复制,就得利用AUTOIT相关的知识,再加上几行命令、语句来解决它,其实任何语言编程就是这样子滴。
解决方法:在第79行后面加上_GUICtrlListView_SetItemSelected($hListView, -1, False)就行了,同理在第82行后也加上同样的语句。 本帖最后由 netegg 于 2012-11-7 15:07 编辑
已经提醒过楼主,最好把问题说明白点,子项和项是两个概念,另外,项(包括子项)是行,何来的左右之分 感谢楼上的两位!
页:
[1]