70

我有一个需要全屏运行的 .net windows 应用程序。然而,当应用程序启动时,任务栏显示在主窗体的顶部,并且只有在通过单击它或使用 ALT-TAB 激活窗体时才会消失。表单的当前属性如下:

  • WindowState=FormWindowState.Normal
  • TopMost=正常
  • Size=1024,768(这是运行它的机器的屏幕分辨率)
  • FormBorderStyle = 无

我尝试在表单加载时添加以下内容,但没有一个对我有用:

  • this.Focus(); (赋予焦点后 this.Focus 属性始终为假)
  • this.BringToFront();
  • this.TopMost = true; (但这在我的场景中并不理想)
  • this.Bounds = Screen.PrimaryScreen.Bounds;
  • this.Bounds = Screen.PrimaryScreen.Bounds;

有没有办法在 .NET 中做到这一点,或者我是否必须调用本机 Windows 方法,如果是这样,代码片段将不胜感激。

非常感谢

4

9 回答 9

114

采用:

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

然后您的表单被放置在任务栏上。

于 2010-02-16T10:13:54.857 回答
65

我尝试了很多解决方案,其中一些适用于 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,以允许其他表单超越主表单。

它绝对解决了我的问题。

于 2012-01-15T09:37:36.900 回答
16

这就是我使表单全屏显示的方式。

private void button1_Click(object sender, EventArgs e)
{
    int minx, miny, maxx, maxy;
    inx = miny = int.MaxValue;
    maxx = maxy = int.MinValue;

    foreach (Screen screen in Screen.AllScreens)
    {
        var bounds = screen.Bounds;
        minx = Math.Min(minx, bounds.X);
        miny = Math.Min(miny, bounds.Y);
        maxx = Math.Max(maxx, bounds.Right);
        maxy = Math.Max(maxy, bounds.Bottom);
    }

    Form3 fs = new Form3();
    fs.Activate();
    Rectangle tempRect = new Rectangle(1, 0, maxx, maxy);
    this.DesktopBounds = tempRect;
}
于 2013-08-05T04:59:58.937 回答
15

我的简单修复原来是调用表单的Activate()方法,所以没有必要使用TopMost(这是我的目标)。

于 2010-02-16T11:00:10.003 回答
7

经过测试的简单解决方案

我一直在 SO 和其他一些网站上寻找这个问题的答案,但是一个给出的答案对我来说非常复杂,而其他一些答案根本无法正常工作,所以经过大量代码测试后,我解决了这个难题。

注意:我使用的是Windows 8,并且我的任务栏未处于自动隐藏模式。

我发现在执行任何修改之前将 WindowState 设置为 Normal 将停止未覆盖任务栏的错误。

编码

我创建了这个有两个方法的类,第一个进入“全屏模式”,第二个离开“全屏模式”。所以你只需要创建这个类的一个对象,并将你想要设置全屏的表单作为参数传递给 EnterFullScreenMode 方法或 LeaveFullScreenMode 方法:

class FullScreen
{
    public void EnterFullScreenMode(Form targetForm)
    {
        targetForm.WindowState = FormWindowState.Normal;
        targetForm.FormBorderStyle = FormBorderStyle.None;
        targetForm.WindowState = FormWindowState.Maximized;
    }

    public void LeaveFullScreenMode(Form targetForm)
    {
        targetForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        targetForm.WindowState = FormWindowState.Normal;
    }
}

使用示例

    private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FullScreen fullScreen = new FullScreen();

        if (fullScreenMode == FullScreenMode.No)  // FullScreenMode is an enum
        {
            fullScreen.EnterFullScreenMode(this);
            fullScreenMode = FullScreenMode.Yes;
        }
        else
        {
            fullScreen.LeaveFullScreenMode(this);
            fullScreenMode = FullScreenMode.No;
        }
    }

我已经在另一个问题上放置了相同的答案,我不确定它是否与这个问题重复。(链接到另一个问题:如何让 WinForms 应用程序全屏显示

于 2013-05-26T23:05:09.477 回答
6
FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
于 2014-02-15T02:59:35.520 回答
3

我相信可以通过简单地将 FormBorderStyle 属性设置为 None 并将 WindowState 设置为最大化来完成。如果您使用的是 Visual Studio,那么这两者都可以在 IDE 中找到,因此无需以编程方式执行此操作。确保在执行此操作之前包含某种关闭/退出程序的方法,因为这将删除右上角的那个非常有用的 X。

编辑:

试试这个。这是我保存了很长时间的一个片段。我什至不记得该归功于谁,但它确实有效。

/*
 * A function to put a System.Windows.Forms.Form in fullscreen mode
 * Author: Danny Battison
 * Contact: gabehabe@googlemail.com
 */

        // a struct containing important information about the state to restore to
        struct clientRect
        {
            public Point location;
            public int width;
            public int height;
        };
        // this should be in the scope your class
        clientRect restore;
                bool fullscreen = false;

        /// <summary>
        /// Makes the form either fullscreen, or restores it to it's original size/location
        /// </summary>
        void Fullscreen()
        {
            if (fullscreen == false)
            {
                this.restore.location = this.Location;
                this.restore.width = this.Width;
                this.restore.height = this.Height;
                this.TopMost = true;
                this.Location = new Point(0,0);
                this.FormBorderStyle = FormBorderStyle.None;
                this.Width = Screen.PrimaryScreen.Bounds.Width;
                this.Height = Screen.PrimaryScreen.Bounds.Height;
            }
            else
            {
                this.TopMost = false;
                this.Location = this.restore.location;
                this.Width = this.restore.width;
                this.Height = this.restore.height;
                                // these are the two variables you may wish to change, depending
                                // on the design of your form (WindowState and FormBorderStyle)
                this.WindowState = FormWindowState.Normal;
                this.FormBorderStyle = FormBorderStyle.Sizable;
            }
        }
于 2010-02-16T10:16:21.063 回答
2

我没有解释它是如何工作的,但它是有效的,作为牛仔编码器就是我所需要的。

        System.Drawing.Rectangle rect = Screen.GetWorkingArea(this);
        this.MaximizedBounds = Screen.GetWorkingArea(this);
        this.WindowState = FormWindowState.Maximized;
于 2014-08-24T13:43:43.517 回答
-5
FormBorderStyle = FormBorderStyle.Sizable;
TopMost = false;
WindowState = FormWindowState.Normal;

此代码使您的 WINDOWS 全屏显示这也将覆盖整个屏幕

于 2014-05-24T09:09:30.180 回答