web-dev-qa-db-fra.com

Comment créer une application WinForms en plein écran

J'ai une application WinForms que j'essaie de faire en plein écran (un peu comme ce que VS fait en mode plein écran).

Actuellement, je mets FormBorderStyle sur None et WindowState sur Maximized, ce qui me donne un peu plus d'espace, mais ne couvre pas la barre des tâches est visible.

Que dois-je faire pour utiliser cet espace également?

Pour les points de bonus, puis-je faire quelque chose pour que mon MenuStrip masquage automatique cède également cet espace?

101
Grady

Pour la question de base, ce qui suit fera l'affaire (masquer la barre des tâches)

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

Mais curieusement, si vous échangez ces deux dernières lignes, la barre des tâches reste visible. Je pense que la séquence de ces actions sera difficile à contrôler avec la fenêtre de propriétés.

141
Henk Holterman

Une solution simple et testée

Je cherchais une réponse à cette question dans SO et certains autres sites, mais l'un d'eux a donné une réponse était très complexe pour moi et d'autres ne fonctionnaient tout simplement pas correctement, donc après beaucoup de tests de code, j'ai résolu ce casse-tête.

Remarque: J'utilise Windows 8 et ma barre des tâches n'est pas en mode de masquage automatique.

J'ai découvert que le fait de régler WindowState sur Normal avant d'effectuer toute modification arrêterait l'erreur avec la barre des tâches non couverte.

Le code

J'ai créé cette classe qui a deux méthodes, la première entre en "mode plein écran" et la seconde quitte le "mode plein écran". Il vous suffit donc de créer un objet de cette classe et de transmettre le formulaire que vous souhaitez définir en plein écran en tant qu'argument de la méthode EnterFullScreenMode ou de la méthode 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;
    }
}

Exemple d'utilisation

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

J'ai placé cette même réponse sur une autre question que je ne sais pas si c'est un doublon ou non de celle-ci. (Lien vers l'autre question: Comment afficher un Windows Form en plein écran en haut de la barre des tâches? )

19
Zignd

Et pour la question menustrip, essayez set

MenuStrip1.Parent = Nothing

en mode plein écran, il devrait alors disparaître.

Et lorsque vous quittez le mode plein écran, réinitialisez le menustrip1.parent à la forme encore et le menustrip sera normal à nouveau.

6
Stefan

Vous pouvez utiliser le code suivant pour adapter votre écran système et la barre des tâches est 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;
    }

Pas besoin d'utiliser:

    this.TopMost = true;

Cette ligne interfère avec alt+tab pour passer à une autre application. ("TopMost" signifie que la fenêtre reste au-dessus des autres fenêtres, sauf si elles sont également marquées "TopMost".)

5
Raghavendra Devraj

J'ai récemment créé une application Mediaplayer et utilisé des appels d'API pour m'assurer que la barre des tâches était masquée lorsque le programme s'exécutait en plein écran, puis restaurée lorsque le programme n'était pas en plein écran, qu'il n'avait pas le focus ou qu'il était quitté.

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
3
Stefan

Vous devez définir votre fenêtre pour être au top.

2
Tron

Je ne sais pas si cela fonctionnera avec .NET 2.0, mais cela m'a fonctionné avec .NET 4.5.2. Voici le code:

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.

Remarque: vous DEVEZ le placer dans la classe de votre formulaire (Exemple: partial class Form1 : Form { /* Code goes here */ }) ou cela ne fonctionnera pas, car si vous ne le placez sur aucun formulaire, le code this créera une exception.

1
pixelomer

Sur l'événement de déplacement de formulaire, ajoutez ceci:

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);
}
0
Segan