You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# TreeView控件双击事件转换为两次单击事件的实现求助

解决TreeView双击转两次独立单击问题

直接替换你现有自定义TreeView类的代码即可实现需求,无需修改其他业务逻辑:

class MyTreeView : TreeView
{
    // 定义Windows消息常量
    private const int WM_LBUTTONDOWN = 0x0201;
    private const int WM_LBUTTONDBLCLK = 0x0203;

    protected override void WndProc(ref System.Windows.Forms.Message m)
    {
        // 拦截鼠标左键双击消息
        if (m.Msg == WM_LBUTTONDBLCLK)
        {
            // 手动触发一次左键按下消息,补全第二次单击的按下流程
            Message secondClickDown = Message.Create(m.HWnd, WM_LBUTTONDOWN, m.WParam, m.LParam);
            base.WndProc(ref secondClickDown);
            // 跳过默认双击处理逻辑
            return;
        }
        // 其余消息走默认处理
        base.WndProc(ref m);
    }
}

逻辑说明

系统触发双击时的默认消息序列为:

  • 第一次左键按下(WM_LBUTTONDOWN)
  • 第一次左键抬起(WM_LBUTTONUP)
  • 双击事件(WM_LBUTTONDBLCLK)
  • 第二次左键抬起(WM_LBUTTONUP)

你原有代码直接拦截双击消息后返回,只保留了第一次单击的完整流程,因此仅能触发单次单击。上述修改在拦截到双击消息时手动发送一次左键按下消息,和后续系统自动发送的第二次左键抬起消息匹配,即可形成完整的第二次单击流程,最终实现将一次双击转换为两次独立单击的效果。

内容的提问来源于stack exchange,提问作者Jens Slofstra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 01:18:02