我发现@Killercam的解决方案可以正常工作,但是如果用户双击得太快,那会有点令人困惑。不知道其他人是否也是如此。我在这里找到了另一个解决方案。
它使用datagrid的CellValueChanged
和CellMouseUp
。长虹解释说
“原因是OnCellvalueChanged事件在DataGridView认为您已完成编辑之前不会触发。这对于TextBox列是有意义的,因为OnCellvalueChanged不会为每次击键触发[bother],但不会[有意义]。
这是他的例子的作用:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
告诉复选框的代码是在单击时完成编辑的,而不是等到用户离开该字段时:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
编辑:DoubleClick事件与MouseUp事件分开处理。如果检测到DoubleClick事件,则应用程序将完全忽略第一个MouseUp事件。除了MouseUp事件外,还需要将此逻辑添加到CellDoubleClick事件中:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
活动了吗?