我有一个常规的.NET Windows Forms树视图控件。节点设置如下:
组
---儿童
---儿童
如果我双击折叠的组节点,它会展开(如您所料)并触发NodeMouseDoubleClick事件,如果所选节点不是组节点,我的代码会执行某些操作。
当组位于树视图的底部附近时会出现问题,因此当我双击组节点时,它将需要树视图垂直扩展以使子节点适合视图。在这种情况下,如果我双击组节点,当它扩展并调整树视图时,我的鼠标光标位于子节点上(它必须将所有内容都推高),这会导致NodeMouseDoubleClick认为子节点被选中,这会导致非常奇怪的行为。
我该如何解决这个问题?我不应该使用NodeMouseDoubleClick或..?
我看到反馈报告 Problem with TreeView DoubleClick event after expanding/collapsing caused change of scroll 中也解释了这一点。
答案 0 :(得分:15)
NodeDoubleClick
没问题,但使用e.Node
而不是this.treeView1.SelectedNode
。
答案 1 :(得分:7)
双击TreeNode是一个鼠标手势,TreeView已经“使用”它来折叠/扩展节点微软没有像苹果那样推动UI标准,并且在某种程度上微软已经令人失望暴露NodeDoubleClick,因为他们鼓励您使用自己的自定义行为修改TreeView。这可能会误导最终用户,他们期望共同控制的共同行为。
Ben Shneiderman Designing the User Interface ,八个接口设计黄金规则中的第一个:
- 努力保持一致性。
醇>应采取一致的行动顺序 在类似情况下需要; 应使用相同的术语 在提示,菜单和帮助屏幕中; 和一致的命令应该是 全程使用。
长话短说,也许你不应该使用NodeMouseDoubleClick。