表单中面板上的Alt-Tab通知

时间:2012-11-20 11:41:54

标签: c# winforms focus panel alt-tab

我正在尝试清除面板上的某个变量,例如,如果我有一个bool让我知道当我单击拖动面板的表面时我将鼠标指针事件发生时设置为false(这可能是或者可能不是正确的方法,但作为一个例子)。

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

似乎有一种方法可以通过使用表单Deactivate事件来实现这一点,我想我可以在我的面板上调用一个挂起类型方法,如果我创建一个新的Panel类,但我想知道是否已存在某些东西将传播表格中的所有儿童,并通知我们的表格不再是主要焦点。

1 个答案:

答案 0 :(得分:2)

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

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