波斯马BOSSMA Information Technology

DragListView – 实现在ListView控件中拖拽(拖动)列表项(行)

发布时间:2011年10月13日 / 分类:WinForm / 9,046 次浏览 / 评论

很久没有写过WinForm的程序了,这几天整理了下以前写过的几个控件,发现一些比较有用的扩展。今天介绍一个自定义控件DragListView,可以拖拽其中的行,移动它们的位置,从而重新排序。

这个控件适用于使用Details视图显示项的情况。

原理:继承ListView,当点击选中一个列表项时,拖动鼠标时,释放鼠标时,重写相关拖拽方法,实现拖动效果,将选中的列表项插入到拖拽位置。拖动鼠标的过程中,通过判断拖动的数据和位置来设置拖拽的效果。

 

1、重写如下几个关于拖拽的方法:

 

OnItemDrag:启动拖拽,设置拖拽的数据和效果。

OnDragEnter:拖拽进入ListView,判断拖拽的数据格式,并设置拖拽的效果。

OnDragOver:拖动经过ListView时,设置拖动的效果,显示拖放位置线。

OnDragDrop:拖拽释放,移动行。

为了判断拖动的方向,还需要重写OnMouseDown,获取鼠标按下时的坐标,和拖拽释放时的坐标进行比较,判断出向上或向下。

 

2、为了直接拖出来控件就能使用,这里重写了几个属性,设置了默认值。

 

AllowDrop:指示控件是否可以接受用户拖到它上面的数据。默认为True。

FullRowSelect:指示当项被选中时,其所有子项是否同该项一起突出显示。默认为True。

GridLines:指示是否在项和子项周围显示网格线,仅在“详细信息”视图中显示。默认为True。

View:选择可以显示项的五种不同视图中的一种。默认为Details。

Sorting:指示对项进行排序的方式,默认为None才不会自动排序。

 

看看效果:

(1)拖拽中:

(2)拖拽释放:

 

下边看看代码:

里边注释很详细了,如果还有不清楚的请留言。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自波斯马,原文地址《DragListView – 实现在ListView控件中拖拽(拖动)列表项(行)

关键字:

建议订阅本站,及时阅读最新文章!
【上一篇】 【下一篇】

发表评论