我正在使用面板进行自定义控制。我希望能够拖放它,所以我已经在我的控件的MouseDown事件中实现了它。但是当我开始拖动以向用户提供一些反馈时,我希望这个东西能够做出反应。所以在MouseDown中我甚至改变了颜色。然后我想在MouseUp事件中将其更改回来。
我的控件没有安装到VS2008中,只是我编写的一个类,我在运行时实例化(我事先不知道我需要多少等等)。现在,我的控件公开了一个MouseDown事件,以便能够被拖动。当我从父应用程序订阅此事件以实际执行拖放操作时,我的控件不会重新绘制其MouseUp事件!实际上,从不调用MouseUp。另一方面,如果我没有在父应用程序中订阅该事件,则它按预期工作。
发生了什么事?父进程是否正在中断流,以便MouseUp事件永远不会在我的控件中触发?我该如何解决这个问题?
答案 0 :(得分:2)
我不确定您使用的是Windows窗体还是WPF,但在Windows窗体中我的意思是:
public class DerivedPanel : Panel { protected override void OnMouseDown(MouseEventArgs e) { base.OnMouseDown(e); Capture = true; } protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); Capture = false; // Change your color or whatever here } }
在WPF中有两种方法,CaptureMouse()和ReleaseMouseCapture()来做同样的事情。当控件捕获鼠标时,即使光标未在控件上方,它也会收到鼠标事件。这可能会导致您的问题。见MSDN Article
答案 1 :(得分:0)
您是否在mousedown事件的自定义控件中捕获鼠标?尝试捕获mousedown并在mouseup上释放捕获。