如何使WinForms应用程序全屏显示

104 .net c# winforms

我有一个WinForms应用程序,我试图全屏(有点像VS在全屏模式下).

目前,我设置FormBorderStyleNoneWindowStateMaximized这给我多一点空间,但它并没有在任务栏覆盖,如果它是可见的.

我还需要做些什么才能使用这个空间?

对于奖励积分,我可以采取MenuStrip哪些措施让我的自动隐身也放弃这个空间吗?

Hen*_*man 142

对于基本问题,以下将做到这一点(隐藏任务栏)

private void Form1_Load(object sender, EventArgs e)
{
    this.TopMost = true;
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;
}
Run Code Online (Sandbox Code Playgroud)

但是,有趣的是,如果你交换最后两行,任务栏仍然可见.我认为使用属性窗口很难控制这些操作的顺序.

  • 订购问题是为什么以前它不适合我.我实际上是按照该顺序设置属性,但是当窗体已经最大化时,将边框设置为none不会扩展以覆盖任务栏.我通过"恢复"改变边界然后最大化的形式来解决这个问题. (4认同)
  • 我有正确的顺序,它不起作用.任务栏始终可见,应用程序不在其下方,它只是为任务栏留下了免费的spave.(Win7的) (3认同)

Zig*_*gnd 20

经过测试的简单解决方案

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

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

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

代码

我创建了这个有两种方法的类,第一种进入"全屏模式",第二种进入"全屏模式".因此,您只需要创建此类的对象,并将要设置为全屏的Form作为参数传递给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;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法示例

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我已经在另一个问题上提出了相同的答案,我不确定这个问题是否重复.(链接到另一个问题:如何在任务栏顶部全屏显示Windows窗体?)

  • 出于好奇,为什么你有一个完整的枚举来描述真/假的条件? (2认同)
  • 很久以前我写这篇文章的时候,我只是在抓写代码,请注意我的年轻愚蠢.它确实毫无意义,我应该简单地使用布尔类型. (2认同)
  • 啊,无论如何你得到了我的赞成;) (2认同)

Ste*_*fan 6

对于menustrip问题,请尝试设置

MenuStrip1.Parent = Nothing
Run Code Online (Sandbox Code Playgroud)

在全屏模式下,它应该消失.

退出fullscreenmode时,menustrip1.parent再次重置为表单,menustrip将再次正常.


Rag*_*raj 5

您可以使用以下代码来适合您的系统屏幕,并且可以看到任务栏.

    private void Form1_Load(object sender, EventArgs e)
    {   
        // hide max,min and close button at top right of Window
        this.FormBorderStyle = FormBorderStyle.None;
        // fill the screen
        this.Bounds = Screen.PrimaryScreen.Bounds;
    }
Run Code Online (Sandbox Code Playgroud)

无需使用:

    this.TopMost = true;
Run Code Online (Sandbox Code Playgroud)

该行干扰alt+tab切换到其他应用程序.("TopMost"表示窗口保持在其他窗口的顶部,除非它们也标记为"TopMost".)