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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/505167/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 05:59:13  来源:igfitidea点击:

How do I make a WinForms app go Full Screen

c#.netwinforms

提问by

I have a WinForms app that I am trying to make full screen (somewhat like what VS does in full screen mode).

我有一个 WinForms 应用程序,我正在尝试全屏显示(有点像 VS 在全屏模式下所做的)。

Currently I am setting FormBorderStyleto Noneand WindowStateto Maximizedwhich gives me a little more space, but it doesn't cover over the taskbar if it is visible.

目前我正在设置FormBorderStyletoNoneWindowStateto Maximizedwhich 给了我更多的空间,但如果它是可见的,它不会覆盖任务栏。

What do I need to do to use that space as well?

我还需要做什么才能使用该空间?

For bonus points, is there something I can do to make my MenuStripautohide to give up that space as well?

对于奖励积分,我可以做些什么让我的MenuStrip自动隐藏也放弃那个空间?

采纳答案by Henk Holterman

To the base question, the following will do the trick (hiding the taskbar)

对于基本问题,以下将解决问题(隐藏任务栏)

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

But, interestingly, if you swap those last two lines the Taskbar remains visible. I think the sequence of these actions will be hard to control with the properties window.

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

回答by Tron

You need to set your window to be topmost.

您需要将窗口设置为最顶层。

回答by Stefan

I recently made an Mediaplayer application and I used API-calls to make sure the taskbar was hidden when the program was running fullscreen and then restored the taskbar when the program was not in fullscreen or not had focus or was exited.

我最近制作了一个 Mediaplayer 应用程序,并使用 API 调用来确保在程序全屏运行时隐藏任务栏,然后在程序未全屏或没有焦点或退出时恢复任务栏。

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer

Sub HideTrayBar()
    Try


        Dim tWnd As Integer = 0
        Dim bWnd As Integer = 0
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
        ShowWindow(tWnd, 0)
        ShowWindow(bWnd, 0)
    Catch ex As Exception
        'Error hiding the taskbar, do what you want here..
    End Try
End Sub
Sub ShowTraybar()
    Try
        Dim tWnd As Integer = 0
        Dim bWnd As Integer = 0
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
        ShowWindow(bWnd, 1)
        ShowWindow(tWnd, 1)
    Catch ex As Exception
    'Error showing the taskbar, do what you want here..     
               End Try


End Sub

回答by Stefan

And for the menustrip-question, try set

对于菜单条问题,请尝试设置

MenuStrip1.Parent = Nothing

when in fullscreen mode, it should then disapear.

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

And when exiting fullscreenmode, reset the menustrip1.parentto the form again and the menustrip will be normal again.

退出全屏模式时,menustrip1.parent再次重置表单,菜单条将再次正常。

回答by Raghavendra Devraj

You can use the following code to fit your system screen and task bar is visible.

您可以使用以下代码来适应您的系统屏幕并且任务栏是可见的。

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

No need to use:

无需使用:

    this.TopMost = true;

That line interferes with alt+tabto switch to other application. ("TopMost" means the window stays on top of other windows, unless they are also marked "TopMost".)

该线路干扰alt+tab切换到其他应用程序。(“TopMost”意味着窗口停留在其他窗口的顶部,除非它们也被标记为“TopMost”。)

回答by Zignd

A tested and simple solution

经过测试的简单解决方案

I've been looking for an answer for this question in SO and some other sites, but one gave an answer was very complex to me and some others answers simply doesn't work correctly, so after a lot code testing I solved this puzzle.

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

Note: I'm using Windows 8and my taskbar isn't on auto-hide mode.

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

I discovered that setting the WindowState to Normal before performing any modifications will stop the error with the not covered taskbar.

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

The code

编码

I created this class that have two methods, the first enters in the "full screen mode" and the second leaves the "full screen mode". So you just need to create an object of this class and pass the Form you want to set full screen as an argument to the EnterFullScreenMode method or to the LeaveFullScreenMode method:

我创建了这个有两种方法的类,第一个进入“全屏模式”,第二个离开“全屏模式”。所以你只需要创建这个类的一个对象,并将你想要设置全屏的 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;
    }
}

Usage example

使用示例

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

I have placed this same answer on another question that I'm not sure if is a duplicate or not of this one. (Link to the other question: How to display a Windows Form in full screen on top of the taskbar?)

我已将相同的答案放在另一个问题上,我不确定是否与此问题重复。(链接到另一个问题:如何在任务栏顶部全屏显示 Windows 窗体?

回答by pixelomer

I don't know if it will work on .NET 2.0, but it worked me on .NET 4.5.2. Here is the code:

我不知道它是否适用于 .NET 2.0,但它适用于 .NET 4.5.2。这是代码:

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class Your_Form_Name : Form
{
    public Your_Form_Name()
    {
        InitializeComponent();
    }

    // CODE STARTS HERE

    private System.Drawing.Size oldsize = new System.Drawing.Size(300, 300);
    private System.Drawing.Point oldlocation = new System.Drawing.Point(0, 0);
    private System.Windows.Forms.FormWindowState oldstate = System.Windows.Forms.FormWindowState.Normal;
    private System.Windows.Forms.FormBorderStyle oldstyle = System.Windows.Forms.FormBorderStyle.Sizable;
    private bool fullscreen = false;
    /// <summary>
    /// Goes to fullscreen or the old state.
    /// </summary>
    private void UpgradeFullscreen()
    {
        if (!fullscreen)
        {
            oldsize = this.Size;
            oldstate = this.WindowState;
            oldstyle = this.FormBorderStyle;
            oldlocation = this.Location;
            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            fullscreen = true;
        }
        else
        {
            this.Location = oldlocation;
            this.WindowState = oldstate;
            this.FormBorderStyle = oldstyle;
            this.Size = oldsize;
            fullscreen = false;
        }
    }

    // CODE ENDS HERE
}

Usage:

用法:

UpgradeFullscreen(); // Goes to fullscreen
UpgradeFullscreen(); // Goes back to normal state
// You don't need arguments.

Notice: You MUST place it inside your Form's class (Example: partial class Form1 : Form { /* Code goes here */ }) or it will not work because if you don't place it on any form, code thiswill create an exception.

注意:您必须将它放在您的 Form 类中(例如:)partial class Form1 : Form { /* Code goes here */ },否则它将无法工作,因为如果您不将它放在任何表单上,代码this将创建一个异常。

回答by Segan

On the Form Move Event add this:

在表单移动事件上添加:

private void Frm_Move (object sender, EventArgs e)
{
    Top = 0; Left = 0;
    Size = new System.Drawing.Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
}