【问题标题】:MouseUp event interrupted?MouseUp 事件中断?
【发布时间】:2009-10-28 02:00:03
【问题描述】:

我正在使用面板制作自定义控件。我希望能够拖放它,所以我在我的控件的 MouseDown 事件中实现了它。但是我希望当你开始拖动时它会做出反应,给用户一些反馈。所以在 MouseDown 中,我什至改变了颜色。然后我想在 MouseUp 事件中把它改回来。

我的控件没有安装到 VS2008 中,而只是我编写的一个类,我在运行时实例化(我事先不知道我需要多少等等)。现在,我的控件公开了一个 MouseDown 事件以便能够被拖动。当我从父应用程序订阅此事件以实际执行拖放时,我的控件不会在其 MouseUp 事件上重新绘制!事实上,MouseUp 从未被调用过。另一方面,如果我没有订阅父应用中的事件,它会按预期工作。

发生了什么事?父级是否中断了流程,以便在我的控制中永远不会触发 MouseUp 事件?我该如何解决这个问题?

【问题讨论】:

  • 能贴出相关代码吗?
  • 我也许可以,但我觉得有点复杂。我先等一会儿再看答案,看看能不能隔离代码。

标签: c# visual-studio-2008 mouseevent


【解决方案1】:

我不确定您使用的是 Windows 窗体还是 WPF,但在 Windows 窗体中,我的意思是:

公共类 DerivedPanel : 面板 { 受保护的覆盖无效 OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); 捕获=真; } 受保护的覆盖无效 OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); 捕获=假; //在这里改变你的颜色或任何东西 } }

在 WPF 中有两种方法,CaptureMouse() 和 ReleaseMouseCapture() 来做同样的事情。当控件捕获鼠标时,即使光标不在控件上,它也会收到鼠标事件。这可能会导致您的问题。见MSDN Article

【讨论】:

  • 这是一个普通的Windows窗体。感谢您的回复 - 我会在周末尝试,如果我不成功,我会发布一些我正在做的代码。
【解决方案2】:

你是否在 mousedown 事件的自定义控件中捕获鼠标?尝试在 mousedown 上捕获并在 mouseup 上释放捕获。

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多