TreeView双击事件的bug

来源:互联网 发布:linux环境变量生效 编辑:程序博客网 时间:2024/04/30 10:13

同事使用简单继承自WinForm中的TreeView的控件,在NodeMouseClick事件中实现业务逻辑需求,其中有获取当前结点的Checked属性进行判断后再下一步操作的情况。结果发现在鼠标单击的状况下实现正常,而双击下则不正确,即事件只触发一次,而属性变化两次(UI上也发生变化),导致后一次属性变化不能正确完成业务逻辑代码。这种情况在AfterCheck事件、MouseClick事件下都存在。查询资料后发现,这是TreeView在Vista和Win7系统下存在的一个bug,需要将TreeView屏蔽双击。

public class MyTreeView : TreeView {
  protected override void WndProc(ref Message m) {
  // Suppress WM_LBUTTONDBLCLK
  if (m.Msg == 0x203) { m.Result = IntPtr.Zero; }
  else base.WndProc(ref m);
  }
}


当然,这又引起了一个新问题,即无法双击折叠展开节点了,如需求中不需要在意这个变化,那么这个解决方案仍是可接受的。

原创粉丝点击