Tôi thấy các hành vi chọn lựa hành vi chọn lựa cửa sổ tiêu chuẩn là khá khó chịu. Ví dụ: nếu bạn đang sử dụng Explorer và nhấp chuột phải vào nút và nhấn Thuộc tính, nó sẽ làm nổi bật nút và hiển thị hộp thoại thuộc tính cho nút bạn đã nhấp vào. Nhưng khi bạn quay trở lại từ hộp thoại, nút được đánh dấu là nút được chọn trước đó/được đánh dấu trước khi bạn nhấp chuột phải. Tôi thấy điều này gây ra vấn đề về khả năng sử dụng bởi vì tôi mãi mãi bị nhầm lẫn về việc liệu tôi có hoạt động trên nút bên phải hay không.
Vì vậy, trong nhiều GUI của chúng tôi, chúng tôi thay đổi nút cây đã chọn khi nhấp chuột phải để không có nhầm lẫn. Điều này có thể không giống như một ứng dụng iwndos chuẩn như Explorer (và tôi có xu hướng mô hình hóa mạnh mẽ hành vi GUI của chúng tôi sau các ứng dụng cửa sổ chuẩn vì lý do usabiltiy), tôi tin rằng trường hợp ngoại lệ này dẫn đến các cây có thể sử dụng được nhiều hơn.
Dưới đây là một số mã rằng những thay đổi lựa chọn trong thời gian click chuột phải:
private void tree_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// only need to change selected note during right-click - otherwise tree does
// fine by itself
if (e.Button == MouseButtons.Right)
{
Point pt = new Point(e.X, e.Y);
tree.PointToClient(pt);
TreeNode Node = tree.GetNodeAt(pt);
if (Node != null)
{
if (Node.Bounds.Contains(pt))
{
tree.SelectedNode = Node;
ResetContextMenu();
contextMenuTree.Show(tree, pt);
}
}
}
}
Nguồn
2008-12-11 21:10:43
Cảm ơn bạn rất nhiều, tôi có một bổ sung nhỏ cho giải pháp: Bạn cũng có thể sử dụng sự kiện "_NodeMouseClick" cung cấp cho bạn một "TreeNodeMouseClickEventArgs e" trong trường hợp này bạn chỉ có thể sử dụng e.Node và không có bận tâm với việc kiểm tra thời gian nút là null hay không. – SDM
Tôi nhận được kết quả mong muốn với sự kiện MouseDown thay vì MouseUp. – Javier