2012-02-05 42 views
6

Tôi có một hộp kiểm datagridview trong đó một trong các cột là hộp kiểm. Tôi xử lý sự kiện CellContentClick để cập nhật thông tin mọi lúc người dùng chọn hoặc bỏ chọn một trong các hộp kiểm. Nó hoạt động tuyệt vời. Vấn đề của tôi là khi tôi nhấp đúp vào hộp kiểm CellContentClick được gọi và sau đó CellContentDoubleClick sau đó. Tôi muốn hủy cuộc gọi cho CellContentDoubleClick. Có cách nào để làm việc này không?làm thế nào để ngăn chặn sự kiện nhấp đúp trong một datagridview được nâng lên?

+0

Bạn có thể thêm một lá cờ trong lớp rằng nhấp chuột đang được xử lý, và trở lại trong sự kiện click đúp nếu cờ được thiết lập . nhưng điều đó phụ thuộc rất nhiều vào thứ tự các sự kiện được gửi đi, và có lẽ không phải là cách tốt nhất để thực hiện nó. – cyanic

+0

Cảm ơn. Vâng, có vẻ như là một lựa chọn tốt. Tuy nhiên, tôi không biết nếu tôi làm một ** trở lại ** hộp kiểm sẽ kết thúc đánh dấu hoặc không anyways. Một điều tôi đã làm là thiết lập thuộc tính ** ReadOnly ** true, sau này khi bạn kích đúp vào hộp kiểm trong ô chỉ được cập nhật một lần. – user990692

+1

Bạn có thể dễ dàng sử dụng cờ bool để bỏ qua sự kiện khi nó đến ngay sau khi CellContentClick. Tôi bắt đầu gọi đây là lỗi ... Dưới đây là một số thông tin khác: http://www.aspnet-answers.com/microsoft/NET/33946836/datagridview-cellcontentclick-fires-after-celldoubleclick.aspx và http : //stackoverflow.com/questions/381072/datagridview-cellcontentclick và http://social.msdn.microsoft.com/Forums/en-us/csharpgeneral/thread/e6f3a286-3e93-4170-a895-8c68a616cc37 –

Trả lời

1

Bạn có thể xóa trình xử lý sự kiện khỏi DataGrid.

 EventHandler eventHandler = new EventHandler(YourdataGridview_CellContentDoubleClick); 
    YourdataGridview.CellContentDoubleClick -= eventHandler; 
0

Bạn có thể tạo lớp của riêng bạn kế thừa từ DataGridView và ghi đè phương thức sẽ nâng cao sự kiện để nó không được nâng lên.

public class MyDataGridView : DataGridView 
{ 
    protected override viod OnCellContentDoubleClick(
DataGridViewCellEventArgs e) 
    { 
     // by having no code here and not 
     // calling base.OnCellContentDoubleClick(e); 
     // you prevent the event being raised 
    } 
} 

Xem http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.oncellcontentdoubleclick.aspx

0

Làm thế nào về điều này:

public class MyDataGridView : DataGridView 
{ 
    protected override void OnCellContentDoubleClick(DataGridViewCellEventArgs e) 
    { 
     base.OnCellContentClick(e); 
    } 
} 
+1

Bạn không được đã thử mã này. 'vi phạm ghi đè được bảo vệ' – quantum

Các vấn đề liên quan