在DataGridView上移动行时的可视标记

Blu*_*eft 6 .net c# drag-and-drop datagridview winforms

用户在我的DataGridView中上下拖动行.我有拖动逻辑,但我希望有一个黑色标记,指示在放开鼠标后行将放置在哪里.

Microsoft Access中的示例http://img718.imageshack.us/img718/8171/accessdrag.png
来自Microsoft Access的示例; 我想拖动行而不是列

有谁知道我会怎么做呢?这是内置的,还是我必须绘制自己的标记(如果是这样,我该怎么做)?

谢谢!

Igb*_*man 3

几年前我为树视图做了这个;不记得具体如何,但考虑使用MouseMoveDataGridView 的事件。

当拖动发生时,您的 MouseMove 处理程序应该:

  • 获取鼠标的相对坐标(MouseEventArgs包含坐标,但我认为它们是屏幕坐标,因此您可以使用DataGridView.PointToClient()它们将它们转换为相对坐标)
  • 确定哪一行位于该 X 位置(有没有方法?如果没有,您可以通过将行 + 行标题高度相加来计算,但请记住网格可能已滚动)
  • 突出显示该行或使其边框变暗。使边框变暗的一种方法是更改​​属性DataGridViewRow.DividerHeight
  • 当鼠标移出该行时,将其恢复为之前的样子。

如果您想对鼠标下的行的外观进行自定义(而不是仅使用可用属性),则可以使用该DataGridView.RowPostPaint事件。如果您为此事件实现一个处理程序(仅在将一行拖动到另一行上方时使用),则可以使用更粗的画笔重新绘制该行的顶部或底部边框。MSDN 示例在这里。