C# WinForms表单没有';激活后不显示
我有一个WinForms表单,我从两个地方调用,一个是从托盘图标的上下文菜单调用,另一个是从右键单击桌面上的应用程序快捷方式得到的上下文菜单调用。当我使用托盘图标的菜单时,表单会很好地打开,即使最小化了,它也会再次显示。问题是当我使用链接时。如果表单被最小化,它有时会恢复它,但有时不会。任务栏上的应用程序图标将闪烁,但窗口本身不会显示。C# WinForms表单没有';激活后不显示,c#,.net,winforms,C#,.net,Winforms,我有一个WinForms表单,我从两个地方调用,一个是从托盘图标的上下文菜单调用,另一个是从右键单击桌面上的应用程序快捷方式得到的上下文菜单调用。当我使用托盘图标的菜单时,表单会很好地打开,即使最小化了,它也会再次显示。问题是当我使用链接时。如果表单被最小化,它有时会恢复它,但有时不会。任务栏上的应用程序图标将闪烁,但窗口本身不会显示。 我通过调试进行了检查,两个显示表单的调用都来自同一个线程。我是否还遗漏了其他可能会产生干扰的上下文 我使用的代码: public void Display()
我通过调试进行了检查,两个显示表单的调用都来自同一个线程。我是否还遗漏了其他可能会产生干扰的上下文 我使用的代码:
public void Display()
{
this.WindowState = FormWindowState.Normal;
this.Show();
this.Activate();
this.Focus();
}
您是否尝试过此.BringToFront()?是的,它不起作用。问题不在于它隐藏在其他窗口后面,而是它无法从最小化状态恢复。遗憾的是,这是Vista上windows的预期行为。基本上,它是为了保护用户的工作不被当前未使用的应用程序弹出的窗口打断(可怕的焦点窃取)。在您的情况下,应该可以以某种方式覆盖此窗口,但您可能必须从用户启动的进程中将焦点放在现有窗口上。你是如何处理从桌面图标启动的?你可以尝试更多的事情:点击“快捷方式”是非常模糊的,这会启动一个新的过程。一个完全独立于您已经运行的。编写一个单实例应用程序是非常有可能的,没有任何证据表明你确实这么做了。使用WindowsFormsApplicationBase类是一个简单的解决方案,它在原始进程中激发StartupNextInstance()方法。