Lựa chọn 1: Hoàn toàn vô hiệu hóa các sự kiện nhấn đúp chuột.
Tạo một điều khiển khách hàng
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203)
{
m.Result = IntPtr.Zero;
}
else
{
base.WndProc(ref m);
}
}
}
và nhà thiết kế tập tin của bạn (form.Designer.cs), hãy tìm nơi điều khiển được tạo ra, và thay thế các cuộc gọi đến constructor TreeView kiểm soát mới của bạn.
this.treeView1 = new MyTreeView();
Lựa chọn 2: Hãy đối xử với một sự kiện click đôi như hai sự kiện nhấp chuột duy nhất
class MyTreeView : TreeView
{
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0203)
{
m.Msg = 0x0201;
}
base.WndProc(ref m);
}
}
Cá nhân tôi nghĩ rằng phương án 2 là trực quan hơn. Khi người dùng nhấp vào hộp kiểm hai lần, hộp kiểm không được chọn.
Nó hoạt động rất tốt. –
Tôi biết rằng phải có cách nào tốt hơn những gì tôi trả lời, nhưng không thể hiểu được. +1 – TaRDy
Tôi không chắc chắn điều này có hiệu quả không. Lỗi này dường như thực sự làm tắc nghẽn tất cả các sự kiện nhấp đúp. Nếu bạn nhấp đúp vào hộp kiểm, không có sự kiện nhấp đúp nào kích hoạt. Nếu bạn sau đó nhấp chuột duy nhất khá nhiều bất cứ nơi nào, * sau đó * các sự kiện nhấp đúp lửa, nhưng vì họ đã bắn quá muộn, họ kết thúc với thông tin sai trong eventargs của họ. –