114 votes

Comment faire passer une application WinForms en plein écran ?

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

Actuellement, je suis en train de régler FormBorderStyle à None y WindowState à Maximized ce qui me donne un peu plus d'espace, mais ne recouvre pas la barre des tâches si elle est visible.

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

Pour les points bonus, y a-t-il quelque chose que je puisse faire pour que mon MenuStrip autohide pour céder cet espace également ?

161voto

Henk Holterman Points 153608

Pour répondre à 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, fait intéressant, si vous intervertissez 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 des propriétés.

24voto

Zignd Points 778

Une solution simple et éprouvée

J'ai cherché une réponse à cette question sur SO et d'autres sites, mais l'un d'eux a donné une réponse très complexe pour moi et d'autres réponses ne fonctionnent tout simplement pas correctement, donc après beaucoup de tests de code, j'ai résolu ce puzzle.

Note : J'utilise Windows 8 et ma barre des tâches n'est pas en mode auto-masqué.

J'ai découvert que le fait de régler WindowState sur Normal avant d'effectuer toute modification met fin à 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 dans le "mode plein écran" et la seconde quitte le "mode plein écran". Il suffit donc de créer un objet de cette classe et de passer le formulaire que vous voulez mettre en plein écran comme argument à la méthode EnterFullScreenMode ou à 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 dont je ne suis pas sûr qu'elle soit un doublon ou non de celle-ci. (Lien vers l'autre question : Comment afficher un formulaire Windows en plein écran au dessus de la barre des tâches ? )

6voto

Stefan Points 7940

Et pour la question de la bande magnétique, essayez de mettre

MenuStrip1.Parent = Nothing

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

Et lorsque vous quittez le mode plein écran, réinitialisez l'écran d'affichage. menustrip1.parent au formulaire à nouveau et le menustrip redeviendra normal.

5voto

Vous pouvez utiliser le code suivant pour l'adapter à l'écran de votre 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 de l'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").

4voto

Stefan Points 7940

J'ai récemment créé une application Mediaplayer et j'ai utilisé des appels d'API pour m'assurer que la barre des tâches était masquée lorsque le programme fonctionnait en plein écran, puis restaurer la barre des tâches lorsque le programme n'était pas en plein écran, n'avait pas le focus ou é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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X