anythinging 发表于 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)

afan 发表于 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

anythinging 发表于 2021-1-3 12:51:04

afan 发表于 2021-1-3 12:11
因为你没有先创建控件,控件为0,在窗口消息循环中,无消息始终为0,这样会始终触发 Case $list1、Case $li ...
收到,感谢提供权威指点!令我等初学者少走了好多弯路。
页: [1]
查看完整版本: 【已解决】表格切换与排序的问题