【问题标题】:Double-click beavior on a TreeNode checkbox双击 TreeNode 复选框上的行为
【发布时间】:2019-03-23 22:11:26
【问题描述】:

我有一个 TreeView 填充有带有图标和复选框的 TreeNodes

我一直在尝试禁用其中一些在 BerforeCheck 方法中丢弃事件的检查/取消检查功能。这工作正常,直到我双击复选框:复选框的图像与其真实状态相反(如果状态为Checked=false,它会显示一个复选标记)。我尝试在 NodeDoubleClickBeforeClick 方法中手动更改 StateImageIndex ,但没有成功。

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

我怎样才能最好地让它按预期工作,最坏的情况是禁用双击复选框? 谢谢。

PS:问题有already been asked,但没有答案...

【问题讨论】:

  • 我对其进行了测试,基本上,当您双击复选框时,只会检测到一次检查更改。究竟是什么问题?可以发一些代码吗?
  • P.S.我目前正在使用 XP,也许这只是一个 vista/seven 问题...
  • 问题在于,双击后复选框的图像会更改两次(对于两次单击),而复选框的状态仅更改一次 => 不连贯的行为。除了没有太多代码要显示之外,它基本上是组件的默认行为......顺便说一句,我正在使用 Vista。
  • 当我双击一个节点的复选框时,图像(“图像”是指复选框标志)和节点检查状态仅更改一次,因此我无法重现该问题。 ..也许在 XP 上没问题 :(
  • 是的,我确认,它在 XP 上运行良好,而在 Win 7 中我和你有同样的问题......

标签: c# treeview checkbox double-click treenode


【解决方案1】:

试试这个.. :) 为我工作

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

【讨论】:

    猜你喜欢
    • 2012-02-26
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    相关资源
    最近更新 更多