Autoit      AutoIt上路08-列表控件使用示例(创建、插入、删除、修改行、双击修改列、排序)   
文章目录  [隐藏]

AutoIt上路07-标签页中控件同步显示与隐藏 http://www.gaohaiyan.com/945.html


  上一篇我们已经在标签卡内加入列表控件 ListView 了,这一篇我们就单独讲一下列表。根据需求,本例同时使用原生方法和UDF,尽可能精简代码。
 1.ListView 也有原生创建与 UDF 创建2种,为了简单实现点击排序功能,本例使用原生创建,因为其可以直接通过 GuiCtrlSetOnEvent 设置事件处理。
 2.本例中使用的排序方法是UDF中的 _GUICtrlListView_SortItems,使用此之前,须要通过 _GUICtrlListView_RegisterSortCallBack 这个UDF来注册排序回调函数。具体参数可以查阅帮助手册。
 3.插入行-项目,我使用的是原生 GUICtrlCreateListViewItem ,因为希望实现一个奇偶行不同着色。在 GUICtrlCreateListView 后, GUICtrlSetBkColor 使用 GUICtrlSetBkColor($lvInTabJournal, $GUI_BKCOLOR_LV_ALTERNATE) 来设置背景色,并开启奇偶行着色。然后插入行后立即 GUICtrlSetBkColor (-1, 0xffa500 ) 设置行的着色。
 4.删除行时可以选择一行,然后使用 _GUICtrlListView_DeleteItemsSelected 方法。或者暴力一点,使用 GUICtrlSendMsg($lvInTabJournal, $LVM_DELETEALLITEMS, 0, 0) 清空整个列表。
 5.修改行是比较麻烦的。简单一点实现即是 首先得到你选中的行,展示在一个界面中,修改后,把界面中的新数据替换列表里的原数据。复杂的(实际用户体验最好的)即是直接双击或单击列表中的某个单元格,就进入修改状态。
 6.双击修改功能,现在网上找到的方法(能力有限找到的方法就这么一种)可以说是标准方法,就是 GUIRegisterMsg($WM_NOTIFY, '_WM_NOTIFY') + GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND') 。
 WM_NOTIFY:当某个控件的某个事件已经发生或这个控件需要得到一些信息时,发送此消息给它的父窗口;
 WM_COMMAND:当用户选择一条菜单命令项或当某个控件发送一条消息给它的父窗口。
 看上面两个解说似乎不太容易明白,通俗的说WM_NOTIFY和WM_COMMAND都是在窗体的生命周期(双击运行,关闭)里不断执行(执行速度不太明了,但一定很快)的。WM_NOTIFY里会获取到鼠标的各种操作,如左键单击、左键双击、右键单击、右键双击、键盘操作、控件的变化、鼠标所在位置的控件、......。WM_COMMAND会获取到控件各种属性的变化,如被选中、获得焦点、失去焦点、......。

  Win的各种消息代码解释见文末。


注意:本例中的“双击修改单元格”功能,在Window7里的显示效果比较差,而在XP里是很完美的。
Win7:


XP:

  实际各种原生的事件处理方法或者UDF都是以各种消息机制为基础的,你想做的各种交互几乎都可以在 GUIRegisterMsg(消息代码, '处理函数') 中实现。

  关于ListView还有很多常用/实用的UDF,可以查看帮助文档。本文示例中也有一些,尽量做了注释,各位网友仔细研究下吧。
研究帮助文档中的代码是一个很好的学习途径。


Windows消息代码:

承接App定制、企业web站点、办公系统软件 设计开发,外包项目,毕设