【问题标题】:Bring .NET winform to front (focus) on Windows 8在 Windows 8 上将 .NET winform 放在前面(焦点)
【发布时间】:2015-02-10 18:35:36
【问题描述】:

我有一个 .NET 4.5 C# winforms 应用程序,当检测到条形码扫描时,它应该出现在前台(在所有其他应用程序/窗口的前面)。我正在使用此代码来完成它:

if (this.WindowState == FormWindowState.Minimized)
{
    this.WindowState = FormWindowState.Normal;
}
this.Activate();

这在 Windows 7 上完美运行,但在 Windows 8 上不起作用。如果我的应用程序只是最小化(并且是最近获得焦点的应用程序),它确实可以工作,这行:

this.WindowState = FormWindowState.Normal;

但是,当条形码扫描发生时,如果任何其他窗口/应用在我的应用前面,this.Activate() 显然在 Windows 8 上不起作用。

解决办法是什么?

【问题讨论】:

  • 你需要调用BringToFront()方法..所以this.BringToFront应该处理它。
  • 不,是Activate()。这通常可能不会成功,进程无法将窗口推向用户的脸。 Windows 8 中的规则没有什么不同,许多版本都相同。您可能使用不同的 UI。有一种隐秘的作弊方式,就是.NET Framework中的actually included

标签: c# winforms winapi c#-4.0


【解决方案1】:

您需要设置表单的 TopMost 属性。

this.TopMost = true;

【讨论】:

  • 这很棒……但除非将其最小化,否则它将一直强制我的 winform 到前面。理想的情况是它能够被放置在其他事物后面的背景中,但是当发生扫描时,它应该总是出现在前面。有什么方法可以实现吗?
  • 你应该看看条码扫描器的API,可能有一些事件你可以根据需要将TopMost从true/false更改为true/false。
猜你喜欢
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-28
  • 2014-10-19
  • 1970-01-01
  • 2010-11-26
相关资源
最近更新 更多