ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 70927|回复: 175

[分享] 窗体Listview控件实现可编辑功能的完美解决方法

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-8 23:36 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖已被收录到知识树中,索引项:控件
本帖最后由 ivccav 于 2018-7-16 20:09 编辑

个人偏爱于使用Listview,因为其美观易用,但Listview的缺点也很明显,即其内容无法直接编辑,多数人只能用Listview来呈现数据,而使用子窗体来实现编辑的功能。用子窗体编辑数据当然也是一个不错的方法,但如果能直接在Listview上面编辑数据,会更方便些。

本帖使用Listview+InkEdit两个控件实现Listview的功能如下(程序和窗体在办公室的XP系统+Excel2003完成,在家用Win7+Excel2007打开,无版本问题,能顺利运行程序):

1.单击(或设定双击)Listview控件的数据区域,可直接编辑数据(已在代码中同步到Excel数据源);

2. InkEdit控件处于编辑状态时,滚动鼠标滚轮,或拖动Listview的水平或垂直滚动条,能自动隐藏InkEdit控件,并保存已编辑内容;

3. InkEdit控件处于编辑状态时,点击窗体上Textbox等控件时,能自动隐藏InkEdit控件,并保存已编辑内容;

3.实现InkEdit控件的键盘功能。按回车键,保存修改并退出;按ESC键,不保存修改并退出;按上下左右方向键,能自动移动到同一列的上下行位置,或同一行的左右位置,并处于编辑状态,当控件处于Listview边框位置,能确保InkEdit完全可见;

4.可设置Listview指定列是否可编辑。

程序使用了极少量的API,光都是看名字就知道函数用途的API,绝对不会影响对程序的理解和使用。

本帖的方法很简单,代码量很少,但对于我这样的非资深使用者而言,只能在实践中慢慢琢磨,哪天灵光乍现,就完善一下功能。不久前看过一本关于Win32 API的书籍,对本帖问题的解答有很大帮助。阅读是能扩展视野的,哪怕只看过一遍,你一点也不精通那些知识,但在遇到问题时,曾经学习过的知识也能给你提供思路,让你能更容易地找到解答方法。


一些说明:

1.计算InkEdit的位置
Listview标题和Listitem项目的Left不是相同的坐标系,在水平滚动条滚动到右边时,标题的Left是正值,而Listitem的Left是负值。在水平滚动条未滚动时,Listitem的第一列的Left是1.5磅,而不是0,因此计算InkEdit的Left时要加1.5。水平滚动条的值可不用API获取,直接用Abs(Listview1 .SelectedItem.Left-1.5)即可获得。
Listitem项目的Top值跟鼠标事件中的Y值一样,只是所选项目上边到Listview边缘的距离,不包括垂直滚动条已经“卷起来”的数值。

2.指定可编辑的列
在窗体初始化过程中,使用strAllowEditCol = "7/8/9" '即可指定Listview的7至9列可编辑,而不指定该参数时则所有列可编辑。

3. 'InkEdit1的MultiLine,BackColor和.BorderStyle在代码中设置时提示只读属性,只可在设计窗体时设置。如果需要设置的话请在窗体设计时设置好。

4.InkEdit控件在窗体设计时要点击右键——上移一层,不然可能会被Listview覆盖。可在窗体初始化时加一句:InkEdit1.ZOrder 0,这样InkEdit就会在最上一层。

更新说明 2018/7/9 11:17:

1.移除1句漏删的语句,点其他控件时完美切换;
2.增加了模糊匹配的DEMO,可直接使用于实际。

之前下载过的朋友可重新下载。


更新说明 2018/7/16 20:09
1.更正了计算InkEdit的Left的算法错误;
2.增加了新增和删除行功能,实现完全的增删改查;
3.应部分网友要求,增加了数据库版本。

完美实现Listview可编辑功能(增加了新增和删除功能,增加了数据库版本).zip (146.59 KB, 下载次数: 8353)









补充内容 (2023-3-25 13:29):
使用纯代码实现Listview控件网格线颜色、行高和选中行高亮颜色的设置

https://club.excelhome.net/thread-1657761-1-1.html

评分

28

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-9 08:35 | 显示全部楼层
非常强大,这个问题终于有了解决的方法,太有用了,谢谢分享

TA的精华主题

TA的得分主题

发表于 2018-7-9 08:37 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-9 09:01 | 显示全部楼层
本帖最后由 ivccav 于 2018-8-2 12:45 编辑

Listview完整教程:
http://club.excelhome.net/thread-1424969-1-1.html

Excel会弹出安全警告,找了代码文字可屏蔽该警告。
http://club.excelhome.net/thread-568570-1-1.html

我已复制到Workbook_Open中,如需运行请去掉注释。
因为只需要屏蔽一次,可在记事本中修改1次注册表信息即可。
方法和文件详见附件:
取消初始化不安全的ActiveX警告.zip (1.13 KB, 下载次数: 863)

修改操作效果:


操作演示.gif
键盘操作,在边框位置能确保编辑框可见

键盘演示效果.gif

滚动条、鼠标滚动建效果

点击滚动条或滚动鼠标效果.gif




TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-9 09:13 | 显示全部楼层

如果提示“找不到工程或库”,是因为通用控件的版本不同引起的。
QQ图片20180709081718.png


解决方法:

1.在报错后,点击确定,然后点击“运行”——“重新设置”
2.在“工具”——“引用”中,取消勾选有“丢失”字样的选项,“确定”,并保存文件。
QQ图片20180709081750.png

3.再次运行,一般都可顺利运行了。
4.如不行,只需删掉窗体上原来的Listview,自己再画一个即可。

如果“工具箱”上没有Listview控件,可在“工具箱”上右键——“添加附件”,
选中如下图中的项即可:
QQ图片20180709082056.png

5.InkEdit:
QQ图片20180709082204.png

如果你的系统不是完整版,没有这些控件,可下载如下附件:
附件中包含了一个按键码的对照表记事本。
mscomctl版本:6.1.98.34
inked版本:1.0.2201.0

所使用的控件.zip (539.63 KB, 下载次数: 2053)


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-9 11:46 | 显示全部楼层
vbee 发表于 2018-7-9 08:37
优秀作品

Listview控件实现可编辑功能的完美解决方法

感谢支持。

可把HideInkEdit中的.SetFocus删掉,这句多余了,还影响点击TEXTBOX的效果。

我重新更新了附件,并做了一个模糊查询并实现修改的式样。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-9 11:49 | 显示全部楼层
吴狄 发表于 2018-7-9 08:35
非常强大,这个问题终于有了解决的方法,太有用了,谢谢分享


感谢支持,写这代码的原因是因为我需要这个功能。顺便分享给可能需要的朋友。

可把HideInkEdit中的.SetFocus删掉,这句多余了,还影响点击TEXTBOX的效果。

我重新更新了附件,并做了一个模糊查询并实现修改的式样。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-9 19:05 | 显示全部楼层
本帖最后由 ivccav 于 2018-7-9 19:07 编辑

两天前看到别人转发一位歪果仁Brad Martinez在20年前写的可编辑Listview的代码的文字帖,只能修改Subitem,我为了统一风格,让第一列也能同样风格地编辑,增加了几十行代码,大家可以用来学习一下。

外国人写的Listview可编辑功能.zip (5.65 KB, 下载次数: 1299)

昨天在清理收藏贴时发现我收藏了两个关于可编辑的Listview的帖子,正好是使用这位歪果仁的代码,几乎没有改动。下载量很大,看来需要编辑功能的人的确不少。

http://club.excelhome.net/thread-566238-1-1.html

http://club.excelhome.net/thread-566236-1-1.html



TA的精华主题

TA的得分主题

发表于 2018-7-10 11:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-7-10 11:35 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 15:26 , Processed in 0.042646 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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