TreeNode复选框的双击行为

4

我有一个TreeView,其中填充了具有图标和复选框的TreeNodes。

我一直在尝试禁用其中一些的选中/取消选中能力,丢弃BeforeCheck方法中的事件。这很好用,直到我双击复选框为止:复选框的图像与其实际状态相反(如果状态为Checked = false,则显示检查标记)。我尝试通过在NodeDoubleClick和BeforeClick方法中手动更改StateImageIndex来修复它,但没有成功。

更糟糕的是:我在StateImageList中添加了第三个图像(是的,我也希望复选框是三态的),但我还没有使用它(它从未在我的代码中设置过),并且第三个图像被设置为某些双击后的当前状态(此时我无法确定明确的行为)。

我该怎么做才能最好地使其按预期工作,最坏的情况下禁用复选框的双击?谢谢。

PS:这个问题已经被问过,但没有答案...


我进行了测试,基本上当您双击复选框时,仅检测到一次选中状态的更改。问题到底在哪里?你能贴些代码吗? - digEmAll
我现在正在使用XP,也许这只是一个Vista/Seven的问题... - digEmAll
问题是,双击复选框图像后,图像更改两次(就像进行了两次单击),而复选框状态仅更改一次 => 不连贯的行为。另外没有太多的代码可以展示,基本上是组件的默认行为...顺便说一句,我正在使用 Vista。 - gregseth
可能与操作系统附带的.NET框架有关... 你知道你的测试中使用了哪个版本吗? - gregseth
我使用的是 .net 3.5。无论如何,问题肯定出在操作系统上,因为我在两个操作系统上都使用了同一个可执行文件,在 xp 上是正常的,而在 W7 上出现了问题... - digEmAll
显示剩余2条评论
1个回答

5

试一试这个.. :) 对我有效

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接