如何在拖放过程中更改鼠标光标?

时间:2015-09-04 06:41:55

标签: c# winforms drag-and-drop

后台:我有一个C#winforms应用程序。我将信息从一个datagridview拖到另一个。对于我在目标网格上的拖动事件,我有以下代码:

private void grid_DragOver(object sender, DragEventArgs e)
{
      if(e.Data.GetDataPresent(typeof(SelectedRecordsCollection)))
      {
          e.Effect = DragDropEffects.Move; 
      }
}

我想限制只有在鼠标悬停在特定行(例如,具有奇数索引号的行)上时才允许丢弃。我目前限制我在dragdrop事件中实际添加到目标网格的内容。但是,由于上面的代码,只要鼠标悬停在目标控件上的任何位置,我的光标就会变为“移动”图标。

问题:我如何制作光标是一个" Cursor.No"目标网格上的任何地方的图标,除了将鼠标悬停在具有奇数索引的行上时将其设置为“移动”图标?

谢谢。

编辑: Aseem的解决方案最终为我工作。

1 个答案:

答案 0 :(得分:3)

使用HitTest获取行索引。试试这个,但未经过测试 -

private void grid_DragOver(object sender, DragEventArgs e)
{
    // Get the row index of the item the mouse is below. 
    Point clientPoint = dataGridView1.PointToClient(new Point(e.X, e.Y));
    DataGridView.HitTestInfo hit = dataGridView1.HitTest(clientPoint.X, clientPoint.Y);
    if (hit.Type == DataGridViewHitTestType.Cell) {
        e.Effect = (hit.RowIndex%2 == 0)  //move when odd index, else none
            ? DragDropEffects.None
            : DragDropEffects.Move;
    }
}