web-dev-qa-db-fra.com

Comment afficher un Windows Form en plein écran en haut de la barre des tâches?

J'ai une application Windows .net qui doit fonctionner en plein écran. Lorsque l'application démarre, la barre des tâches est affichée en haut du formulaire principal. Elle ne disparaît que lorsque vous activez le formulaire en cliquant dessus ou en utilisant ALT-TAB. Les propriétés actuelles du formulaire sont les suivantes:

  • WindowState = FormWindowState.Normal
  • TopMost = Normal
  • Taille = 1024,768 (c'est la résolution d'écran des machines sur lesquelles il va tourner)
  • FormBorderStyle = Aucun

J'ai essayé d'ajouter les éléments suivants lors du chargement du formulaire, mais aucun n'a fonctionné pour moi:

  • this.Focus (); (après avoir donné le focus à this.Focus, la propriété est toujours fausse)
  • this.BringToFront ();
  • this.TopMost = true; (cela ne serait toutefois pas idéal dans mon scénario)
  • this.Bounds = Screen.PrimaryScreen.Bounds;
  • this.Bounds = Screen.PrimaryScreen.Bounds;

Existe-t-il un moyen de le faire dans .NET ou devrais-je invoquer des méthodes Windows natives et, dans ce cas, un extrait de code serait très apprécié.

merci beaucoup

61
myquestionoftheday

Mon correctif simple s'est avéré appeler la méthode Activate() du formulaire, il n'y a donc pas besoin d'utiliser TopMost (c'est ce que je visais).

12
myquestionoftheday

Utilisation:

FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;

Et puis votre formulaire est placé sur la barre des tâches.

95
TcKs

J'ai essayé tellement de solutions, certaines fonctionnent sous Windows XP et toutes ne fonctionnaient PAS sous Windows 7. Après tout, j'écris une méthode simple pour le faire.

private void GoFullscreen(bool fullscreen)
    {
        if (fullscreen)
        {
            this.WindowState = FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = Screen.PrimaryScreen.Bounds;
        }
        else
        {
            this.WindowState = FormWindowState.Maximized;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        }
    }

l'ordre du code est important et ne fonctionnera pas si vous modifiez l'emplacement de WindwosState et FormBorderStyle.

L'un des avantages de cette méthode est de laisser TOPMOST sur false afin de permettre à d'autres formulaires de s'afficher par rapport au formulaire principal.

Cela a absolument résolu mon problème.

47
mammadalius

Voici comment je crée des formulaires en plein écran.

private void button1_Click(object sender, EventArgs e)
{
    int minx, miny, maxx, maxy;
    inx = miny = int.MaxValue;
    maxx = maxy = int.MinValue;

    foreach (Screen screen in Screen.AllScreens)
    {
        var bounds = screen.Bounds;
        minx = Math.Min(minx, bounds.X);
        miny = Math.Min(miny, bounds.Y);
        maxx = Math.Max(maxx, bounds.Right);
        maxy = Math.Max(maxy, bounds.Bottom);
    }

    Form3 fs = new Form3();
    fs.Activate();
    Rectangle tempRect = new Rectangle(1, 0, maxx, maxy);
    this.DesktopBounds = tempRect;
}
FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
5
MEO

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 puis-je faire en sorte qu'une application WinForms passe en plein écran )

4
Zignd

Je pense que cela peut être fait en définissant simplement votre propriété FormBorderStyle sur None et le paramètre WindowState sur Maximized. Si vous utilisez Visual Studio, les deux peuvent être trouvés dans le IDE), il n'est donc pas nécessaire de le faire par programme. Assurez-vous d'inclure un moyen de fermer/quitter le programme avant de faire cette cause cela supprimera ce si utile X dans le coin supérieur droit.

MODIFIER:

Essayez ceci à la place. C'est un extrait que je garde depuis longtemps. Je ne me souviens même pas à qui en rendre compte, mais cela fonctionne.

/*
 * A function to put a System.Windows.Forms.Form in fullscreen mode
 * Author: Danny Battison
 * Contact: [email protected]
 */

        // a struct containing important information about the state to restore to
        struct clientRect
        {
            public Point location;
            public int width;
            public int height;
        };
        // this should be in the scope your class
        clientRect restore;
                bool fullscreen = false;

        /// <summary>
        /// Makes the form either fullscreen, or restores it to it's original size/location
        /// </summary>
        void Fullscreen()
        {
            if (fullscreen == false)
            {
                this.restore.location = this.Location;
                this.restore.width = this.Width;
                this.restore.height = this.Height;
                this.TopMost = true;
                this.Location = new Point(0,0);
                this.FormBorderStyle = FormBorderStyle.None;
                this.Width = Screen.PrimaryScreen.Bounds.Width;
                this.Height = Screen.PrimaryScreen.Bounds.Height;
            }
            else
            {
                this.TopMost = false;
                this.Location = this.restore.location;
                this.Width = this.restore.width;
                this.Height = this.restore.height;
                                // these are the two variables you may wish to change, depending
                                // on the design of your form (WindowState and FormBorderStyle)
                this.WindowState = FormWindowState.Normal;
                this.FormBorderStyle = FormBorderStyle.Sizable;
            }
        }
2
Christopher B. Adkins

Je n'ai pas d'explication sur la façon dont cela fonctionne, mais fonctionne, et être codeur de cow-boy, c'est tout ce dont j'ai besoin.

        System.Drawing.Rectangle rect = Screen.GetWorkingArea(this);
        this.MaximizedBounds = Screen.GetWorkingArea(this);
        this.WindowState = FormWindowState.Maximized;
1
Antonio Lopez