我得到了它使用下面的工作。它运作良好。结束编辑后,我将当前单元格设置为同一行中的不可编辑单元格,以保留行选择,但仍退出可编辑单元格。
我还添加了InEditMode = false添加到CellEndEdit事件的情况下,代码会为他们之前的用户退出编辑模式。
测试了一下,我觉得在50个像素结束后,编辑给出了远高于100个像素更好的体验。
bool InEditMode = false;
Point EditStartLocation;
private void dgv_TimeCard_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
EditStartLocation = dgv_TimeCard.PointToClient(Cursor.Position);
InEditMode = true;
}
private void dgv_TimeCard_MouseMove(object sender, MouseEventArgs e)
{
if (InEditMode == false) return;
int DistanceToEndEdit = 50;
if (Math.Abs(EditStartLocation.X - e.X) > DistanceToEndEdit || Math.Abs(EditStartLocation.Y - e.Y) > DistanceToEndEdit)
{
dgv_TimeCard.EndEdit();
dgv_TimeCard.CurrentCell = dgv_TimeCard.CurrentRow.Cells["Date"];
InEditMode = false;
}
}
private void dgv_TimeCard_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
InEditMode = false;
}
DataGridView CellMouseLeave事件? – c4pricorn
以及为什么你要设置一个时间间隔无论如何..如果用户因为“电话呼叫”而分心,那么'恕我直言'你的'有'有缺陷,即'逻辑' – MethodMan
@ c4pricorn你的声誉得分是666。有点可怕吧?说真的,谢谢,但我希望鼠标光标可以说100像素(例如),以消除在鼠标仍然键入单元格时鼠标碰撞到编辑模式的可能性。 –