Tôi thấy giải pháp của @ Killercam hoạt động nhưng hơi khó xử nếu người dùng nhấp đúp quá nhanh. Không chắc liệu người khác có tìm thấy trường hợp đó không. Tôi đã tìm thấy một giải pháp khác ở đây .
Nó sử dụng datagrid's CellValueChanged
và CellMouseUp
. Changhong giải thích rằng
"Lý do cho điều đó là sự kiện OnCellvalueChanged sẽ không kích hoạt cho đến khi DataGridView cho rằng bạn đã hoàn tất việc chỉnh sửa. Điều này có ý nghĩa đối với Cột TextBox, vì OnCellvalueChanged sẽ không [bận tâm] kích hoạt cho mỗi lần đánh phím, nhưng nó không [ có ý nghĩa] cho CheckBox. "
Đây là hành động từ ví dụ của anh ấy:
private void myDataGrid_OnCellValueChanged(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
}
}
Và mã để cho hộp kiểm biết rằng nó đã được chỉnh sửa xong khi được nhấp vào, thay vì đợi cho đến khi người dùng rời khỏi trường:
private void myDataGrid_OnCellMouseUp(object sender,DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
Chỉnh sửa: Sự kiện DoubleClick được xử lý tách biệt với sự kiện MouseUp. Nếu sự kiện DoubleClick được phát hiện, ứng dụng sẽ hoàn toàn bỏ qua sự kiện MouseUp đầu tiên. Logic này cần được thêm vào sự kiện CellDoubleClick ngoài sự kiện MouseUp:
private void myDataGrid_OnCellDoubleClick(object sender,DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == myCheckBoxColumn.Index && e.RowIndex != -1)
{
myDataGrid.EndEdit();
}
}
CurrentCellDirtyStateChanged
Sự kiện?