猿问

DataGridView CellMouseEnter 检测灰色区域

我试图在模仿悬停事件DataGridView控件显示一个Cursor.Hand当DataGridViewImageColumn一直徘徊


我正在尝试这个(订阅CellMouseEnter)


dgv_tabla.CellMouseEnter += dgv_tabla_Hover;

并检查是否RowIndex不是 -1


private void dgv_tabla_Hover(object sender, DataGridViewCellEventArgs e)

{

    //The index of the column where i want to show Cursor.Hand

    var index = dgv_tabla.Columns["Remove"].Index;


    if (e.ColumnIndex == index && e.RowIndex >= 0)

        dgv_tabla.Cursor = Cursors.Hand;

    else

        dgv_tabla.Cursor = Cursors.Default;

}

问题是,当我将鼠标悬停在“删除”单元格并向下移动鼠标(到“灰色区域”)时,Cursor.Hand不要更改为Cursor.Default


更好理解的图像:

有什么方法可以实现这一目标吗?



慕森卡
浏览 238回答 2
2回答

噜噜哒

另一种解决方案是使用该MouseMove事件并HitTest 按照 TaW在上述评论中的建议进行操作。在这种情况下,您的代码将如下所示:dgv_tabla.MouseMove += Dgv_tabla_MouseMove;private void Dgv_tabla_MouseMove(object sender, MouseEventArgs e){    int index = dgv_tabla.Columns["Remove"].Index;    DataGridView.HitTestInfo info = dgv_tabla.HitTest(e.X, e.Y);    if (info.ColumnIndex == index && info.RowIndex >= 0)        dgv_tabla.Cursor = Cursors.Hand;    else        dgv_tabla.Cursor = Cursors.Default;}

慕尼黑的夜晚无繁华

使用该CellMouseLeave事件将光标重置为默认值。在这种情况下,您不需要else分支:dgv_tabla.CellMouseEnter += dgv_tabla_Hover;dgv_tabla.CellMouseLeave += dgv_tabla_CellMouseLeave;private void dgv_tabla_Hover(object sender, DataGridViewCellEventArgs e){    //The index of the column where i want to show Cursor.Hand    var index = dgv_tabla.Columns["Remove"].Index;    if (e.ColumnIndex == index && e.RowIndex >= 0)        dgv_tabla.Cursor = Cursors.Hand;}private void dgv_tabla_CellMouseLeave(object sender, DataGridViewCellEventArgs e){    dgv_tabla.Cursor = Cursors.Default;}
随时随地看视频慕课网APP
我要回答