2015-11-13 28 views
-1

通过点击其他对象的鼠标在一个单元结束编辑模式的默认行为是远离那种笨重的在我看来。我认为可以肯定地说,如果用户抓住鼠标并将它从处于编辑模式的单元格移开,他们将完成对单元格的编辑。这将允许我验证他们的输入,而不要求他们先点击某个东西。更好的用户体验恕我直言。如何结束编辑模式中的DataGridView单元格时鼠标移动从细胞

那么,如何可以具有在DataGridView自动结束在小区上编辑模式,当鼠标被移动一定距离(或者一定的时间间隔)远离即在编辑模式下的细胞?

+1

DataGridView CellMouseLeave事件? – c4pricorn

+0

以及为什么你要设置一个时间间隔无论如何..如果用户因为“电话呼叫”而分心,那么'恕我直言'你的'有'有缺陷,即'逻辑' – MethodMan

+0

@ c4pricorn你的声誉得分是666。有点可怕吧?说真的,谢谢,但我希望鼠标光标可以说100像素(例如),以消除在鼠标仍然键入单元格时鼠标碰撞到编辑模式的可能性。 –

回答

1

我得到了它使用下面的工作。它运作良好。结束编辑后,我将当前单元格设置为同一行中的不可编辑单元格,以保留行选择,但仍退出可编辑单元格。

我还添加了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; 
} 
相关问题