2011-03-16 42 views
4

我有一个TreeView填充TreeNodes有图标和复选框。在TreeNode复选框上双击beavior

我一直试图禁用其中一些放弃在BerforeCheck方法中的事件的检查/取消选中能力。这工作正常,直到我双击复选框:复选框的图像是它的真实状态的相反(它显示一个复选标记,如果状态是Checked=false)。我试图修复在NodeDoubleClickBeforeClick方法中手动更改StateImageIndex而没有成功。更糟的是:我在StateImageList(是的,我希望复选框也是三态的)中添加了第三个图像,但我还没有使用它(它从未在我的代码中设置过),第三个图像是双击后设置为框的当前状态(此时我无法确定明确的行为)。

我该怎么做才能让它按照最佳方式工作,在最坏的情况下禁用双击复选框? 谢谢。

PS:这个问题有already been asked,但一直无人接听......

+0

我测试了它,基本上,当你双击一个复选框检查变更仅被检测一次。究竟是什么问题?你可以发布一些代码吗? – digEmAll 2011-03-16 08:18:34

+0

P.S.我目前使用的是XP,也许这只是一个Vista/7的问题... – digEmAll 2011-03-16 08:30:45

+0

问题是,双击后复选框的图像更改两次(如两次点击),而复选框的状态仅更改一旦=>不连贯的行为。除了没有太多的代码显示,它基本上是组件的默认行为...... BTW我正在使用Vista。 – gregseth 2011-03-16 08:39:29

回答

4

试试这个.. :)工作对我来说

public class NewTreeView : TreeView 
    { 
     protected override void WndProc(ref Message m) 
     { 
      if (m.Msg == 0x203) 
       m.Result = IntPtr.Zero; 
      else 
       base.WndProc(ref m); 
     } 
    } 
+1

好戏法!太不好的必须这样做来修复这样一个错误... – gregseth 2011-04-11 15:15:59