C#-为什么全屏winform应用程序始终不会覆盖任务栏?
时间:2020-03-06 14:34:14 来源:igfitidea点击:
我正在使用Windows Vista和C#.net 3.5,但是我让我的朋友在XP上运行该程序,并且遇到了同样的问题。
因此,我有一个Cprogram,它在SystemTray中带有一个图标在后台运行。我有一个低级的键盘钩,因此当我按下两个键(在这种情况下为Ctr + windows)时,它将拉出应用程序的主要形式。在组合键按下甚至处理程序中,该表单被设置为全屏显示:
this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized;
因此,它基本上可以正常工作。当我点击CTR + Windows时,无论我关注什么程序,它都会显示该表格。但是有时,任务栏仍会显示在表单上,这是我不想要的。当我按下该键组合时,我希望它始终显示为全屏。
我认为这与应用程序最初关注的内容有关。但是,即使单击主窗体,有时任务栏也会停留在该窗体上。因此,我想知道焦点是否真的是问题所在。似乎有时候任务栏很固执,不想坐在我的程序后面。
有人对我该如何解决有任何想法吗?
编辑:更多详细信息
当我们将Web浏览器置于全屏模式或者将Powerpoint置于演示模式时,我试图实现与Web浏览器相同的效果。
在Windows窗体中,我们可以通过将边框样式设置为无并最大化窗口来实现。但是有时由于某种原因,窗口不会覆盖任务栏。一半的时间。
如果我的主窗口位于最顶部,则单击该窗口时其他窗口将位于其后,如果任务栏处于隐藏状态,则不需要该窗口。
解决方案
据我所知,根据"将任务栏置于其他窗口上方"设置,任务栏位于窗口上方或者下方。 (至少,这是XP中的用语。)我想我们可以尝试看看是否可以检测到此设置,并在需要时进行切换?
尝试调整表单的大小并将其置于z顺序的前面,如下所示:
Rectangle screenRect = Screen.GetBounds(this); this.Location = screenRect.Location; this.Size = screenRect.Size; this.BringToFront();
试试这个(其中" this"是表单):
this.Bounds = Screen.PrimaryScreen.Bounds; this.TopMost = true;
这样会将表单设置为全屏显示,并覆盖任务栏。
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.F11) if (FormBorderStyle == FormBorderStyle.None) { FormBorderStyle = FormBorderStyle.Sizable; WindowState = FormWindowState.Normal; } else { SuspendLayout(); FormBorderStyle = FormBorderStyle.None; WindowState = FormWindowState.Maximized; ResumeLayout(); } }