【问题标题】:form not getting proper focus in c#表单在 c# 中没有得到适当的关注
【发布时间】:2012-02-28 18:52:59
【问题描述】:

我写了一个小表单应用程序,它只包含文本框。我通过使用低级键盘挂钩启用快捷键,以便在需要时为应用程序提供焦点。 一切正常,我第一次按下快捷键,即(左控制键)+(左控制键)应用程序获得正确的控制(焦点)。 但是当我停用并重做快捷键时,任务栏上的应用程序图标开始闪烁并且表单没有获得焦点,标题栏显示为灰色。

更多信息:

  1. 停用时,表单的不透明度会降低,但仍保持在顶部,因此表单始终显示在屏幕上
  2. 此表单是从应用程序中的另一个类激活的。
  3. 在激活时表单的不透明度增加,因此现在非常清晰可见

我通过使用 form.Activate() 将重点放在应用程序上,我也尝试过 from.Visible 但没有运气。 仅第一次激活,任务栏图标闪烁后提示。

有人知道为什么会这样吗?

【问题讨论】:

  • 这是正常的,你不能把焦点从另一个应用程序上偷走。您应该使用 RegisterHotKey() 而不是钩子。

标签: c# winforms focus


【解决方案1】:

这个答案也适用于你: https://stackoverflow.com/a/3789985/64121 。您需要使用AttachThreadInput API 函数来将焦点从另一个应用程序转移。

【讨论】:

  • 感谢您指出的解决方案工作但部分...现在激活工作没有问题,但问题是有时焦点被我的应用程序占用并且它不会在重复鼠标单击时停用。只有单击我的应用程序然后单击其他应用程序才能解决此问题。我在这里看到了类似的问题,social.msdn.microsoft.com/Forums/en-US/winforms/thread/… 但我无法理解他最终提供的解决方案。有人可以帮忙吗?
猜你喜欢
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 2013-11-08
  • 1970-01-01
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多