【问题标题】:Alt-Tab notification on panels within a form表单内面板上的 Alt-Tab 通知
【发布时间】:2012-11-20 11:41:54
【问题描述】:

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

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

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

【问题讨论】:

  • WinForms 还是 WPF? (forms 标签用于 HTML 表单,如果你想要 WinForms 则使用 WinForms 标签。)
  • 对不起,应该是 Winforms,我现在改了。谢谢。

标签: c# winforms focus panel alt-tab


【解决方案1】:

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

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

【讨论】:

  • 它主要用于面板的滚动而不是拖放项目,但鼠标捕获很高兴知道感谢,对于任何其他位,我将连接到激活/停用事件。三个 ups 现在等待你。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
相关资源
最近更新 更多