ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[Excel 程序开发] [第48期] 类模块应用之 彩色列表框

[复制链接]

TA的精华主题

TA的得分主题

发表于 2009-6-2 00:10 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
答题方式:
直接跟贴回复。


题目说明和要求:

根据控件工具栏中ListBox控件的主要功能,采用类模块封装列表框工具,封装应彻底(即不使用类模块以外代码,如不在公用模块中定义变量等)。
1、不使用第三方控件
2、使用控件工具栏的缺省控件进行封装;
3、实现单个列表项目的属性BackColor和ForeColor属性;
4、实现属性Top、Left、Width、Height、RowSource、ListCount、ListIndex、Enabled、Visible属性等;
5、实现方法RemoveItem方法,AddItem方法,Clear方法等;
6、提供相关主要事件;
7、支持多项选择。
本题最高评分标准5分,评分将根据实际答卷情况而定
以下演示图片演示了部分相关功能,请参照完成。

我的答案在21楼.

[ 本帖最后由 清风_ll 于 2009-6-28 22:57 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-2 00:32 | 显示全部楼层
像清风这样的高手们达到了无剑胜有剑的境地了,可怜我辈还没入门。我了做几个表格到处求助,
唉呀呀

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-5 22:48 | 显示全部楼层

现在的题目是越来越难了,水越来越深!
伤回脑筋,不知道能否整下来。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-7 08:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
设计思路:
1、添加一个frame作为"colorlistbox"的容器
2、在frame中添加label作为"ColorListBox"的Item,即ColorListItem

由于时间关系,担心错过时间,尚未完善! REMOVE 方法未完成,



答卷完成情况:
1、按要求1、2完成控件的封装;
2、提供并实现了列表项的ForeColor和BackColor属性(通过Additem或List函数实现);
3、未完成ListIndex、Enabled、Visible等属性;
4、RemoveItem方法未完成
5、虽然在类模块中声明了事件,但没有触发代码或未完成事件触发功能,事件均不能有效触发.
6、允许多选,但没有提供选项开关或相关属性。

针对本答卷主要有以下问题和建议:
1、类模块中使用了用户窗体名称,不能被直接移植到其它工程;
2、控件高度自动适应列表项数量,未保证Height属性正确设置;
3、可以利用Frame控件提供的KeepScrollBarsVisible 属性,指定相应属性值后,控件将自动根据控件的大小及控件的ScrollHeight或ScrollWidth属性值决定是否显示滚动条;
4、提供的与ComboBox控件的ListRows属性类似的DisplayLines属性,个人认为对于列表框控件不是很适合或没必要。
                                         ------ 清风_ll


[ 本帖最后由 清风_ll 于 2009-6-28 10:37 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-7 13:02 | 显示全部楼层
对彩色列表框用了一个比较简单的思路,先在内存创建一个内存DC后,根据列表框数据在内存DC中实时的绘画出一张彩色数据位图,通过重新设置的listbox窗口函数,截获WM_Paint消息,用BitBlt函数将内存DC中的位图刷入listboxDC中.

在做题时一直有一个很大的疑惑,VBA的listbox中滚动条产生的消息只有一个WM_paint消息,其后的wParam,lParam值为0,导至不能通过WM_paint消息来控制listbox的滚动条,致使位图也不能随滚动条移动而相应移动.本想自绘一个滚动条的,但那工程量又比较大了,偷点懒放弃这个笨想法了(一定有更好的办法只是自己没有想到),等开卷时学习大家的一点先进技术了.

** yangchun88 对API比较熟悉,代码中使用了很多的API函数。
答卷完成情况:
1、按要求1、2完成控件的封装;
2、提供了单个列表项的ForeColor,未提供BackColor属性(代码中使用了模块级变量BackColor,不能进行设置),没有发现提供对某个指定列表项进行以上属性设置的功能.使用SelectedItem对象好象也不正确。
3、未完成ListIndex、Enabled、Visible等属性;
4、RemoveItem方法执行结果有时不正确.
5、提供了事件,但因为未实现滚动条的滚动跟随,导致MouseMove事件不正确.
6、允许多选,但没有提供选项开关或相关属性。

针对本答卷主要有以下问题和建议:
1、类模块中使用了用户窗体名称,不能被直接移植到其它工程;
2、因为重新指定窗口函数,不可避免的使用了标准模块,未达到完全封装的要求;
3、正如10楼所述,使用Frame控件会好些,希望能够学习您修改后的代码;
4、多个实例时,不正确。
                                                 ------清风_ll


[ 本帖最后由 清风_ll 于 2009-6-28 21:37 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-16 04:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
“即不使用类模块以外代码,如不在公用模块中定义变量等”
没有十分理解这句,窗体里有代码不知行不
按照自己的理解写的,不知合格不

重新写了

以最后提供的答案评分,本贴不评分。------清风_ll

[ 本帖最后由 清风_ll 于 2009-6-28 21:55 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2009-6-20 01:01 | 显示全部楼层
又看了下动画,有个地方我理解错了。还以为标签只是在被点蓝的情况下才有value可以返回的,代码里也是这么写的

临时抱佛脚,可能已经超时了,不为评分,只为学学!!
提供了不彻底封装的事件(附件内有提的问题)

答卷情况:
1、按要求1、2完成答卷;
2、未提供单个列表项的ForeColor和BackColor属性;
3、ItemAdd和Additem方法都没有文本参数?代码中多个地方使用控件名称Frame1及其它控件的固定名称,不能确保指向该实例的容器(Frame控件);

4、指定RowSource属性时,原列表项目未清除,代码中引用了RefEdit控件名称;未实现Visible、Enabled等属性;
5、未为控件提供相关主要事件;
6、允许多选,但没有提供相应开关或属性。

针对本答卷主要有以下问题:
1、多个过程及参数名称没有意义,代码较难看懂;
2、滚动条始终显示;
3、不必使用到命令按钮;

4、不支持多个实例;
5、关于事件触发的问题,请参考我的答案,有问题再讨论。
                                                        ------清风_ll


[ 本帖最后由 清风_ll 于 2009-6-28 21:54 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-20 19:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
交作业来了

答卷情况:
1、按要求1、2完成答卷;
2、未提供运行时对单个列表项的ForeColor和BackColor属性设置;
3、代码中多个地方使用控件名称Frame1及其它控件的固定名称,不能确保指向该实例的容器(Frame控件);
4、RemoveItem方法直接删除所有选择项,没有提供参数;
5、未提供ListIndex属性
6、未为控件提供事件;
7、允许多选,但没有提供相应开关或属性。
针对本答卷主要有以下问题和建议:
1、在类模块ColorListItem中定义了一个ColorListItem对象ff
2、滚动条始终显示;
3、可以使用数组代替文本框;
4、不支持多个实例;

                                       ------清风_ll

[ 本帖最后由 清风_ll 于 2009-6-28 22:24 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2009-6-26 03:45 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

这是操作图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?免费注册

x

TA的精华主题

TA的得分主题

发表于 2009-6-26 14:51 | 显示全部楼层
学习了,看到zldccmx 网友的杰作,让我一下明白了,原来可以再加个Frame控件,这个控件里有picture句柄.
将生产的listbox控件用frame控件代替,再将内存DC里的位图复制到这里,用户操作frame控件就等同于操作listbox了!frame控件支持了滚动条,还免去了重新设置窗口函数(类模外代码了).想想自己真是笨了,不知道变通一下!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-21 19:32 , Processed in 0.038588 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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