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

本文关键字:鼠标 光标 过程中 拖放 | 更新日期: 2023-09-27 18:11:04

Background:我有一个c# winforms应用程序。我拖动信息从一个数据视图到另一个。对于目标网格上的拖放事件,我有以下代码:

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

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

问题:我如何使光标是一个"游标"?在目标网格上到处都没有"图标",除非将其设置为移动图标,以便当鼠标位于具有奇数索引的行上时?

谢谢。

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

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

使用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;
    }
}