Winform中双击TreeView的CheckBox,级联节点变化不一致的问题

这两天捣鼓Winform的TreeView时遇到一个很纠结的问题:
我的TreeView是带有CheckBox的级联树,单击父节点的时候,子节点也会发生相应的变化
遇到的问题是 当发生双击事件时,被点击的节点状态变化了两次,一切正常。
但是其他节点却只变化了一次。 下断点仔细检查后发现,虽然是双击 但是AfterCheck事件却只触发一次。。
后来上网查过之后得知这是Win7和Vista下的操作系统Bug,解决方法是写一个自定义的TreeView类,并覆盖一个方法

using System;
using System.Windows.Forms;

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);
  }
}

不过这样有一个副作用,就是双击节点时,失去了[展开/折叠]的效果

使用方法:重新编译后,就会在工具栏看到一个名为MyTreeView的自定义控件了,直接拖动即可。

posted @ 2013-04-10 16:20  TiestoRay  阅读(593)  评论(0编辑  收藏  举报