找回密码
 加入
搜索
查看: 1631|回复: 2

[网络通信] 【已解决】表格切换与排序的问题

[复制链接]
发表于 2021-1-3 11:41:56 | 显示全部楼层 |阅读模式
本帖最后由 anythinging 于 2021-1-3 13:18 编辑

请教各位朋友2个表格切换与排序的问题,2个内容不一样的表格切换显示,一般采用什么方法比较好?
     (1)我现在采用2个listview,显示一个的时候把另一个用_GUICtrlListView_Destroy删除
     (2)还有个方法,用同一样listview,显示另一个内容时,保留listview,把前面的所有行列内容删除,再显示新的内容。
2、目前排序貌似可以正常用,但如果把msgbox启用,好象有点问题,,恳请指点。
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

Global $gui,$list1,$list2

GUICreate($gui,400,300)

$bt1=GUICtrlCreateButton('切换1',20,270,60,20)
$bt2=GUICtrlCreateButton('切换2',100,270,60,20)

Func list1()
$list1 = GUICtrlCreateListView("英文 1|英文 2|英文 3", 10, 10, 280, 180)
        _GUICtrlListView_AddItem($list1,'aa')
        _GUICtrlListView_AddSubItem($list1,0,'bb',1)
        _GUICtrlListView_AddSubItem($list1,0,'cc',2)
        _GUICtrlListView_AddItem($list1,'dd')
        _GUICtrlListView_AddSubItem($list1,1,'ee',1)
        _GUICtrlListView_AddSubItem($list1,1,'ff',2)

        _GUICtrlListView_RegisterSortCallBack($List1,0)
EndFunc

Func list2()
$list2 = GUICtrlCreateListView("数字 1|数字 2|数字 3|数字 4", 10, 10, 280, 180)
        _GUICtrlListView_AddItem($list2,'11')
        _GUICtrlListView_AddSubItem($list2,0,'22',1)
        _GUICtrlListView_AddSubItem($list2,0,'33',2)
        _GUICtrlListView_AddSubItem($list2,0,'44',3)
        _GUICtrlListView_AddItem($list2,'55')
        _GUICtrlListView_AddSubItem($list2,1,'66',1)
        _GUICtrlListView_AddSubItem($list2,1,'77',2)
        _GUICtrlListView_AddSubItem($list2,1,'88',3)

        _GUICtrlListView_RegisterSortCallBack($List2,0)
EndFunc

GUISetState()


While 1
        Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                        ExitLoop
                Case $bt1
                        _GUICtrlListView_Destroy($list2)
                        list1()
                        _GUICtrlListView_SortItems($List2, GUICtrlGetState($List2))
                Case $bt2
                        _GUICtrlListView_Destroy($list1)
                        list2()
                        _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $list1
                        _GUICtrlListView_SortItems($list1, GUICtrlGetState($list1))
;~                                 MsgBox(262144,'List1',1)
                Case $list2
                        _GUICtrlListView_SortItems($list2, GUICtrlGetState($list2))
;~                                 MsgBox(262144,'List2',2)
        EndSwitch
        Sleep(10)
WEnd

_GUICtrlListView_UnRegisterSortCallBack($List1)
_GUICtrlListView_UnRegisterSortCallBack($List2)

发表于 2021-1-3 12:11:39 | 显示全部楼层
因为你没有先创建控件,控件为0,在窗口消息循环中,无消息始终为0,这样会始终触发 Case $list1、Case $list2,幸好你加了Msg调试,否则效率可想而知。
可以先两个都创建,需要时显示一个隐藏另一个就行了
另外
Case $bt1、Case $bt2 里面的 _GUICtrlListView_SortItems 控件1 、2反了,而且也不需要。
列表2 既然是数字比对,第二个参数也错了,应该用1或2: _GUICtrlListView_RegisterSortCallBack($List2, 1)
#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

Global $gui, $list1, $list2

GUICreate($gui, 400, 300)
list1()
list2()
$bt1 = GUICtrlCreateButton('切换1', 20, 270, 60, 20)
$bt2 = GUICtrlCreateButton('切换2', 100, 270, 60, 20)
GUICtrlSetState($list1, 16)        ;可以先显示一个,注释此行则都不显示
GUISetState()

While 1
        Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                        ExitLoop
                Case $bt1
                        GUICtrlSetState($list2, 32)
                        GUICtrlSetState($list1, 16)
                Case $bt2
                        GUICtrlSetState($list1, 32)
                        GUICtrlSetState($list2, 16)
                Case $list1
                        _GUICtrlListView_SortItems($list1, GUICtrlGetState($list1))
;~                         MsgBox(262144, 'List1', 1)
                Case $list2
                        _GUICtrlListView_SortItems($list2, GUICtrlGetState($list2))
;~                         MsgBox(262144, 'List2', 2)
        EndSwitch
WEnd

_GUICtrlListView_UnRegisterSortCallBack($list1)
_GUICtrlListView_UnRegisterSortCallBack($list2)

Func list1()
        $list1 = GUICtrlCreateListView("英文 1|英文 2|英文 3", 10, 10, 280, 180)
        _GUICtrlListView_AddItem($list1, 'aa')
        _GUICtrlListView_AddSubItem($list1, 0, 'bb', 1)
        _GUICtrlListView_AddSubItem($list1, 0, 'cc', 2)
        _GUICtrlListView_AddItem($list1, 'dd')
        _GUICtrlListView_AddSubItem($list1, 1, 'ee', 1)
        _GUICtrlListView_AddSubItem($list1, 1, 'ff', 2)
        _GUICtrlListView_RegisterSortCallBack($list1, 0)
        GUICtrlSetState(-1, 32)
EndFunc   ;==>list1

Func list2()
        $list2 = GUICtrlCreateListView("数字 1|数字 2|数字 3|数字 4", 10, 10, 280, 180)
        _GUICtrlListView_AddItem($list2, '11')
        _GUICtrlListView_AddSubItem($list2, 0, '22', 1)
        _GUICtrlListView_AddSubItem($list2, 0, '233', 2)
        _GUICtrlListView_AddSubItem($list2, 0, '144', 3)
        _GUICtrlListView_AddItem($list2, '55')
        _GUICtrlListView_AddSubItem($list2, 1, '66', 1)
        _GUICtrlListView_AddSubItem($list2, 1, '77', 2)
        _GUICtrlListView_AddSubItem($list2, 1, '88', 3)
        _GUICtrlListView_RegisterSortCallBack($list2, 1)
        GUICtrlSetState(-1, 32)
EndFunc   ;==>list2

评分

参与人数 1金钱 +40 收起 理由
anythinging + 40 赞一个!

查看全部评分

 楼主| 发表于 2021-1-3 12:51:04 | 显示全部楼层
afan 发表于 2021-1-3 12:11
因为你没有先创建控件,控件为0,在窗口消息循环中,无消息始终为0,这样会始终触发 Case $list1、Case $li ...

收到,感谢提供权威指点!令我等初学者少走了好多弯路。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-16 12:42 , Processed in 0.125374 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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