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();
        }
}