C# - 为什么全屏winform应用程序永远不会覆盖任务栏?

时间:2008-09-22 23:02:07

标签: c# .net winforms fullscreen keyboard-hook

我正在使用Windows Vista和C#.net 3.5,但我让我的朋友在XP上运行程序并遇到同样的问题。

所以我有一个C#程序,我在后台运行,在SystemTray中有一个图标。我有一个低级键盘钩,所以当我按下两个键(在这种情况下为Ctr +窗口)时,它将拉动应用程序的主窗体。在组合键按下甚至处理程序中将表单设置为全屏:

this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;

所以它基本上有效。当我点击CTR + Windows时,它会调出表单,无论我关注哪个程序。但有时候,任务栏仍然会显示在我不想要的表单上。当我按下那个键组合时,我希望它始终是全屏的。

我认为这与应用程序最初关注的内容有关。但即使我点击我的主表单,任务栏有时也会停留在那里。所以我想知道焦点是否真的是问题。看起来有时候任务栏很顽固,并且不想坐在我的程序后面。

任何人都有任何想法如何解决这个问题?

编辑:更多详情 - 我试图获得与将Web浏览器置于全屏模式时或将powerpoint置于演示模式时相同的效果。

在Windows窗体中,您可以将边框样式设置为none并最大化窗口。但有时窗口不会出于某种原因覆盖任务栏。它会有一半的时间。

如果我将主窗口放在最顶层,当我点击它时其他窗口会落在它后面,如果任务栏被隐藏,我不想要。

5 个答案:

答案 0 :(得分:18)

试试这个(this是你的表格):

this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;

这会将表单设置为全屏,它将覆盖任务栏。

答案 1 :(得分:2)

我已经尝试了很多解决方案,其中一些解决方案适用于Windows XP,并且所有这些解决方案都无法在Windows 7上运行。毕竟我写了一个简单的方法。

private void GoFullscreen(bool fullscreen)
    {
        if (fullscreen)
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
        }
        else
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }

代码的顺序很重要,如果你改变WindwosState和FormBorderStyle的位置,它将不起作用。

此方法的一个优点是使TOPMOST处于false状态,允许其他表单覆盖主窗体。

它绝对解决了我的问题。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

据我所知,任务栏位于窗口的上方或下方,基于“将任务栏保留在其他窗口之上”设置。 (至少,这是XP中的措辞。)我想你可以试着看看你是否可以检测到这个设置并在需要时切换它?

答案 4 :(得分:0)

尝试调整表单大小并将其置于z顺序的前面,如下所示:

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();