2009-01-23 6 views
14

Tôi có quyền kiểm soát chế độ xem tre .NET Windows Forms thông thường. Các nút được thiết lập như thế này:Hoạt động nhấp đúp vào TreeView trong .NET/C#

Nhóm

--- con

--- con

Nếu tôi nhấp đúp vào một nút Nhóm sụp đổ, nó mở rộng (như bạn mong muốn) và sự kiện NodeMouseDoubleClick được tắt, trong đó mã của tôi thực hiện điều gì đó nếu nút được chọn KHÔNG phải là nút nhóm.

Sự cố phát sinh khi Nhóm được đặt gần cuối treeview, do đó khi tôi nhấp đúp vào nút Nhóm, nó sẽ yêu cầu các khung nhìn để mở rộng theo chiều dọc để vừa với các nút con vào chế độ xem. Trong trường hợp này, nếu tôi nhấp đúp vào nút Nhóm, vào thời điểm nó mở rộng và điều chỉnh treeview, con trỏ chuột của tôi nằm trên nút con (nó phải đẩy mọi thứ lên) và điều đó khiến cho NodeMouseDoubleClick nghĩ rằng nút con được chọn, gây ra hành vi rất kỳ quặc.

Làm cách nào để giải quyết vấn đề này? Tôi có nên không sử dụng NodeMouseDoubleClick hay ..?

Tôi thấy điều này cũng được giải thích trong báo cáo phản hồi Problem with TreeView DoubleClick event after expanding/collapsing caused change of scroll.

Trả lời

15

NodeDoubleClick là tốt, nhưng thay vì sử dụng e.Node, hãy sử dụng this.treeView1.SelectedNode.

7

Nhấp đúp vào TreeNode là cử chỉ chuột đã được TreeView sử dụng để thu gọn/mở rộng các nút Microsoft không đẩy tiêu chuẩn giao diện người dùng nhiều như Apple, và ở một mức độ nào đó, điều đáng thất vọng là Microsoft đã tiếp xúc với NodeDoubleClick, bởi vì họ đang khuyến khích bạn sửa đổi TreeView với hành vi tùy chỉnh của riêng bạn. Điều này có thể gây hiểu lầm cho người dùng cuối, những người mong đợi hành vi chung từ các điều khiển chung.

Từ Designing the User Interface bởi Ben Shneiderman, là người đầu tiên của Tám nguyên tắc vàng của Thiết kế giao diện:

  1. Phấn đấu cho sự nhất quán.

Các chuỗi hành động nhất quán phải là được yêu cầu trong các trường hợp tương tự; thuật ngữ giống hệt nhau nên được sử dụng trong lời nhắc, menu và màn hình trợ giúp; và các lệnh nhất quán phải là được sử dụng trong toàn bộ.

Câu chuyện dài ngắn, có thể bạn không nên sử dụng NodeMouseDoubleClick.

+2

nếu khách hàng muốn, tôi sẽ thực hiện nó ... – thumbmunkeys

+2

Điều đó có ý nghĩa nếu nút không có con, để làm điều gì đó với nội dung mà nút đó đại diện. Điều đó có vẻ phù hợp, hoặc ít nhất là hợp lý. Tôi đang làm điều này khi các nút với trẻ em đại diện cho các thư mục và các nút mà không có nội dung đại diện cho các tệp. Nhấp đúp vào nút tệp sẽ khiến tệp mở. – jeromeyers