一个比较难搞定的问题(控件重绘)

Tidal_Choidi 2015-03-19 11:09:13
Winform开发,重绘ListView控件,主要实现以下功能:

1.以列为单位,在每一Item中的subItem中添加CheckBox(注意:是在子项中,而不是通过设置listview控件本身的属性CheckBoxes=true实现第一列是否有checkbox)。
2.在列头添加checkbox,可以通过这个checkbox控制同一列下的子项checkbox的全选与反选功能。

3.在子项中添加ComboBox,可以在ComboBox的下拉功能中选值。

如下图:



以上是本人自己实现的界面,功能上还没实现,比如:列头的CheckBox如何响应用户的选中与否的事件处理。请高手给一些建议,或者有已经写好的代码作参考。
...全文
205 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tidal_Choidi 2015-03-20
  • 打赏
  • 举报
回复
引用 2 楼 assky124 的回复:
干嘛不用DataGridView,而要自己造轮子?
而且还这么难看



按照你提供的思路,顺利解决了问题。自己重绘listView控件这活儿留着以后没事情做了再去完善吧,效果图:


其中整列显示ComboBox的效果只需要在列数据类型设置一下属性就行了,再次感谢!

结贴了。
於黾 2015-03-19
  • 打赏
  • 举报
回复
C-ONE,DEV控件,第三方控件不是有的是吗
Tidal_Choidi 2015-03-19
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
找找别的控件吧 如果.net自带控件功能不足,找找第三方控件 重绘太麻烦,你这是自己造控件的节奏,不是说说那么容易的
你知道的除了系统的DataGridView之外,还有木有比较好用的第三方控件?重绘控件这活儿不好干啊。。
Tidal_Choidi 2015-03-19
  • 打赏
  • 举报
回复
引用 2 楼 assky124 的回复:
干嘛不用DataGridView,而要自己造轮子? 而且还这么难看
如果要按照这个思路实现功能以后,再美化一下就比较好了。我现在也是在尝试着重绘,看来不是想象中那么简单。 换个思路试试了。
Tidal_Choidi 2015-03-19
  • 打赏
  • 举报
回复
引用 1 楼 xuanbg 的回复:
遍历整个列表呗。。。
楼上这位仁兄,木有明白你说的遍历是个嘛意思?^_^
於黾 2015-03-19
  • 打赏
  • 举报
回复
找找别的控件吧 如果.net自带控件功能不足,找找第三方控件 重绘太麻烦,你这是自己造控件的节奏,不是说说那么容易的
assky124 2015-03-19
  • 打赏
  • 举报
回复
干嘛不用DataGridView,而要自己造轮子? 而且还这么难看
software_artisan 2015-03-19
  • 打赏
  • 举报
回复
遍历整个列表呗。。。
格拉 2015-03-19
  • 打赏
  • 举报
回复
用了WPF后,再也回不去了
功能介绍: 取色,取到的颜色可以通过ColorChanged事件参数e.Color获得,还可以在控件里把current变量公开出来 实现过程: 控件由很多色块组成。目前固定尺寸6x36,你可以自己修改尺寸。 控件分层是这样的(从最底层到最上层): 1.控件绘图面2.色块3.网格4.边框5.光标 在Paint事件中按上面顺序绘制2-5。 绘制网格很简单,根据色块大小隔一定距离画一道横(竖)线 绘制色块道理差不多,先获取当前坐标(行,列)的颜色(根据你自己定义的调色盘计算出来),然后填充一个方块,转到处理下一个坐标,直到全部行列都处理完。 然后绘制所有色块 从表面上看,是通过鼠标移动,选取每个色块获得颜色。其实不然。那样做,我就需要保存每个色块的颜色信息,白白浪费空间。我的实现方法是通过鼠标位置得知当前鼠标所在色块的坐标(行,列),然后用上面的颜色算法直接得到该色块的颜色,一句话搞定(Point pt是鼠标位置)。 标移动时会绘制光标,为了减少性能开销,不能直接Refresh()/Invalidate()控件,使用Invalidate(Rectangle)来重绘被鼠标弄脏的那个区域。所以用了两个小矩形保存旧光标和新光标的区域,然后在鼠标事件中更新(和鼠标取色一起)。 然后鼠标移动事件里重绘时稍微把区域扩大点(避免留下看的边框)。 最后一行「OnColorChanged();是用来引发颜色改变事件。把事件写出来基本就完成了。 然后再完善下属性之类的,就可以在你的程序里使用了。 程序简单适合新手学习使用。 注意: 开发环境为Visual Studio 2010
取色板源码 功能介绍: 取色,取到的颜色可以通过ColorChanged事件参数e.Color获得,还可以在控件里把current变量公开出来 实现过程: 控件由很多色块组成。目前固定尺寸6x36,你可以自己修改尺寸。 控件分层是这样的(从最底层到最上层): 1.控件绘图面2.色块3.网格4.边框5.光标 在Paint事件中按上面顺序绘制2-5。 绘制网格很简单,根据色块大小隔一定距离画一道横(竖)线 绘制色块道理差不多,先获取当前坐标(行,列)的颜色(根据你自己定义的调色盘计算出来),然后填充一个方块,转到处理下一个坐标,直到全部行列都处理完。 然后绘制所有色块 从表面上看,是通过鼠标移动,选取每个色块获得颜色。其实不然。那样做,我就需要保存每个色块的颜色信息,白白浪费空间。我的实现方法是通过鼠标位置得知当前鼠标所在色块的坐标(行,列),然后用上面的颜色算法直接得到该色块的颜色,一句话搞定(Point pt是鼠标位置)。 标移动时会绘制光标,为了减少性能开销,不能直接Refresh()/Invalidate()控件,使用Invalidate(Rectangle)来重绘被鼠标弄脏的那个区域。所以用了两个小矩形保存旧光标和新光标的区域,然后在鼠标事件中更新(和鼠标取色一起)。 然后鼠标移动事件里重绘时稍微把区域扩大点(避免留下看的边框)。 最后一行「OnColorChanged();是用来引发颜色改变事件。把事件写出来基本就完成了。 然后再完善下属性之类的,就可以在你的程序里使用了。 程序简单适合新手学习使用。 注意: 开发环境为Visual Studio 2010

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧