找回密码
 加入
搜索
查看: 4343|回复: 12

[GUI管理] 关于ListView风格和_GUICtrlListView_CopyItems 的问题 [已解决]

  [复制链接]
发表于 2012-11-6 08:26:21 | 显示全部楼层 |阅读模式
本帖最后由 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

 

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-11-6 11:14:28 | 显示全部楼层
懂的人回一下谢谢
发表于 2012-11-6 11:54:22 | 显示全部楼层
没看明白楼主的意思
 楼主| 发表于 2012-11-6 11:58:06 | 显示全部楼层
就是左边ListView的项能移动到右边ListView
而右边ListView不能移动到左边ListView
是移动
不是复制
 楼主| 发表于 2012-11-6 12:00:07 | 显示全部楼层
还有就是复选框的问题
上面的图
我明明只选 了一个复选框 项
还有一个蓝底项
但结果是两项都有效
发表于 2012-11-6 14:33:14 | 显示全部楼层
本帖最后由 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函数。
 楼主| 发表于 2012-11-7 08:32:02 | 显示全部楼层
感谢 shqf  的回答
 楼主| 发表于 2012-11-7 11:54:58 | 显示全部楼层
难道没人发现这个问题?
发表于 2012-11-7 14:56:41 | 显示全部楼层
本帖最后由 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行后也加上同样的语句。
发表于 2012-11-7 15:06:25 | 显示全部楼层
本帖最后由 netegg 于 2012-11-7 15:07 编辑

已经提醒过楼主,最好把问题说明白点,子项和项是两个概念,另外,项(包括子项)是行,何来的左右之分
 楼主| 发表于 2012-11-8 17:13:13 | 显示全部楼层
感谢楼上的两位!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 07:07 , Processed in 0.223162 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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