DataGridView CellMouseEnter检测灰色区域
DataGridView CellMouseEnter detecting grey area
我正在尝试在 DataGridView
控件中模拟悬停事件,以便在 DataGridViewImageColumn
悬停时显示 Cursor.Hand
我正在尝试这个(订阅 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;
}
问题是,当我将鼠标悬停在 "Remove" 单元格上并向下移动鼠标(到“'grey area'”)时,Cursor.Hand
不会更改为 Cursor.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;
}
另一种解决方案是使用 MouseMove
事件并在上面的评论中执行 HitTest
。在这种情况下,您的代码将如下所示:
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;
}
我正在尝试在 DataGridView
控件中模拟悬停事件,以便在 DataGridViewImageColumn
悬停时显示 Cursor.Hand
我正在尝试这个(订阅 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;
}
问题是,当我将鼠标悬停在 "Remove" 单元格上并向下移动鼠标(到“'grey area'”)时,Cursor.Hand
不会更改为 Cursor.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;
}
另一种解决方案是使用 MouseMove
事件并在上面的评论中执行 HitTest
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;
}