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 ?

3voto

geriwald Points 100

J'ai travaillé sur l'idée de Zingd et je l'ai rendue plus simple à utiliser.

J'ai également ajouté la norme Touche F11 pour activer le mode plein écran.

Configuration

Tout est maintenant dans la classe FullScreen, donc vous n'avez pas besoin de déclarer un tas de variables dans votre formulaire. Vous instanciez simplement un objet FullScreen dans le constructeur de votre formulaire :

FullScreen fullScreen;

public Form1()
{
    InitializeComponent();
    fullScreen = new FullScreen(this);
}

Veuillez noter que cela suppose que le formulaire n'est pas maximisé lorsque vous créez l'objet FullScreen.

Utilisation

Il suffit d'utiliser l'une des fonctions de la classe pour faire basculer le mode plein écran :

fullScreen.Toggle();

ou si vous devez le gérer explicitement :

fullScreen.Enter();
fullScreen.Leave();

Code

using System.Windows.Forms;

class FullScreen
{ 
    Form TargetForm;

    FormWindowState PreviousWindowState;

    public FullScreen(Form targetForm)
    {
        TargetForm = targetForm;
        TargetForm.KeyPreview = true;
        TargetForm.KeyDown += TargetForm_KeyDown;
    }

    private void TargetForm_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyData == Keys.F11)
        {
            Toggle();
        }
    }

    public void Toggle()
    {
        if (TargetForm.WindowState == FormWindowState.Maximized)
        {
            Leave();
        }
        else
        {
            Enter();
        }
    }

    public void Enter()
    {
        if (TargetForm.WindowState != FormWindowState.Maximized)
        {
            PreviousWindowState = TargetForm.WindowState;
            TargetForm.WindowState = FormWindowState.Normal;
            TargetForm.FormBorderStyle = FormBorderStyle.None;
            TargetForm.WindowState = FormWindowState.Maximized;
        }
    }

    public void Leave()
    {
        TargetForm.FormBorderStyle = FormBorderStyle.Sizable;
        TargetForm.WindowState = PreviousWindowState;
    }
}

2voto

user22290 Points 949

Vous devez définir votre fenêtre comme étant la plus haute.

1voto

Je ne sais pas si cela fonctionnera sur .NET 2.0, mais cela a fonctionné sur .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
}

Utilisation :

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

Avis : Vous DEVEZ le placer à l'intérieur de 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.

1voto

Segan Points 476

Sur l'événement Form Move, 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);
}

1voto

Quinton Points 11

Si vous voulez garder la bordure du formulaire et pour qu'il couvre la barre des tâches, utilisez ce qui suit :

Définir FormBoarderStyle soit FixedSingle ou Fixed3D

Définir MaximizeBox à False

Définir WindowState à Maximized

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