0

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

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

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

4

2 回答 2

2

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

公共类 DerivedPanel : 面板
{
    受保护的覆盖无效 OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        捕获=真;
    }

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

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

于 2009-02-05T15:15:36.000 回答
0

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

于 2009-02-04T20:36:54.000 回答