0

我正在尝试清除面板上的一些变量,例如,如果我有一个布尔值,它让我知道当我在面板的表面上单击拖动时我会在发生 MouseUp 事件时将其设置为 false(这可能会也可能不会是正确的方法,但作为一个例子)。

如果在单击拖动时,我然后 alt-tab 到另一个应用程序,面板本身似乎没有收到任何通知,例如 focus-> leave / mouseup,是否有我遗漏的东西,一个我忽略的事件?

似乎有一种方法可以通过使用表单 Deactivate 事件来做到这一点,我想如果我创建一个新的 Panel 类,我可以在我的面板上调用一个挂起类型的方法,但我想知道是否已经存在可以传播所有孩子们在表单上带有一些通知,我们的表单不再是主要焦点。

4

1 回答 1

2

可靠地获取此类通知需要您使用 Capture 属性。在 MouseDown 事件上将其设置为 true。它确保所有鼠标消息都指向您的面板,即使鼠标不再悬停在面板上。但是,这仍然不包括粗鲁的焦点更改,例如 Alt+Tab 或 Alt+Esc。您还需要实现 MouseCaptureChanged 事件以了解操作系统何时介入。

一般来说,如果你想实现 Drag + Drop,那么你应该使用 DoDragDrop()。当它返回时,无论出于何种原因,您始终可以确定拖动操作已完成。该方法的返回值告诉您发生了什么。请注意,这也支持切换到另一个窗口,尽管它不是很容易发现,但您拖动到任务栏按钮以强制切换。

于 2012-11-20T14:32:27.003 回答