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

Visio插件拖动形状后MouseUp事件不触发问题

Visio插件拖动形状时MouseUp未触发、MouseMove持续激活的解决方案

问题根源

Visio在处理形状拖动操作时,全局Application.MouseUp事件会被内部拖动逻辑拦截,无法触发自定义处理函数;同时直接绑定/解绑全局MouseMove的方式,会因为MouseUp未触发导致事件无法正常解绑,最终造成MouseMove持续激活。

修复方案

改用窗口级鼠标事件(而非全局应用级)监听,确保拖动过程中的鼠标事件能正确传递,同时完善异常场景的处理:

修改后的代码示例

private Visio.Window _activeDragWindow;
private bool _isMouseTrackingActive;

// 插件初始化时绑定窗口切换事件,防止异常泄漏
public void Initialize(Visio.Application app)
{
    _app = app;
    _app.WindowDeactivate += OnWindowDeactivate;
}

private void MouseDown(int Button, int KeyButtonState, double x, double y, ref bool CancelDefault)
{
    Debug.WriteLine("MouseDown called...");
    if (!_isMouseTrackingActive)
    {
        _activeDragWindow = _app.ActiveWindow;
        // 绑定当前活动窗口的MouseMove和MouseUp
        _activeDragWindow.MouseMove += OnWindowMouseMove;
        _activeDragWindow.MouseUp += OnWindowMouseUp;
        _isMouseTrackingActive = true;
    }
}

private void OnWindowMouseUp(int Button, int KeyButtonState, double x, double y, ref bool CancelDefault)
{
    Debug.WriteLine("MouseUp called...");
    CleanupDragTracking();
}

private void OnWindowMouseMove(int Button, int KeyButtonState, double x, double y, ref bool CancelDefault)
{
    Debug.WriteLine($"X: {x}  Y: {y}");
}

// 处理窗口切换时的清理,防止事件泄漏
private void OnWindowDeactivate(Visio.Window window)
{
    if (_isMouseTrackingActive && window == _activeDragWindow)
    {
        CleanupDragTracking();
    }
}

// 统一的事件清理逻辑
private void CleanupDragTracking()
{
    if (_isMouseTrackingActive && _activeDragWindow != null)
    {
        _activeDragWindow.MouseMove -= OnWindowMouseMove;
        _activeDragWindow.MouseUp -= OnWindowMouseUp;
        _isMouseTrackingActive = false;
        _activeDragWindow = null;
    }
}

关键说明

  • 窗口级事件(Window.MouseUp/Window.MouseMove)是当前交互的上下文,不会被Visio的拖动逻辑拦截,能确保拖动结束时正常触发MouseUp。
  • 新增WindowDeactivate事件监听,防止拖动过程中切换窗口导致事件无法解绑。
  • 提取统一的CleanupDragTracking方法,避免重复代码,确保事件解绑逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:10:04