C # - Pourquoi une application Winform en plein écran ne couvre-t-elle pas TOUJOURS la barre des tâches?

StackOverflow https://stackoverflow.com/questions/118130

Question

J'utilise Windows Vista et C # .net 3.5, mais j'avais un ami qui exécutait le programme sous XP et qui avait le même problème.

J'ai donc un programme C # qui s'exécute en arrière-plan avec une icône dans SystemTray. J'ai un crochet de clavier bas niveau donc quand j'appuie sur deux touches (Ctr + windows dans ce cas) ça va tirer de la forme principale de l'application. Le formulaire est configuré pour être en plein écran dans la liste déroulante, appuyez même sur le gestionnaire:

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

Donc, cela fonctionne fondamentalement. Lorsque je tape CTR + Windows, le formulaire s’affiche, quel que soit le programme sur lequel je me suis concentré. Mais parfois, la barre des tâches apparaîtra toujours sur le formulaire, ce que je ne souhaite pas. Je veux que ce soit toujours en plein écran quand je frappe cette combinaison clé.

Je suppose que cela a quelque chose à voir avec l'application à l'origine ciblée. Mais même lorsque je clique sur mon formulaire principal, la barre des tâches y reste parfois. Je me demande donc si le problème est vraiment le centre d'intérêt. Il semble juste que parfois la barre des tâches est têtue et ne veut pas rester derrière mon programme.

Quelqu'un a-t-il des idées pour résoudre ce problème?

EDIT: Plus de détails- J'essaie d'obtenir le même effet qu'un navigateur Web lorsque vous le mettez en mode plein écran ou lorsque vous mettez Powerpoint en mode présentation.

Dans un formulaire Windows, vous le faites en mettant le style de bordure à aucun et en maximisant la fenêtre. Mais parfois, la fenêtre ne couvre pas la barre des tâches pour une raison quelconque. La moitié du temps, ce sera.

Si j'ai la fenêtre principale en haut, les autres vont tomber derrière lorsque je clique dessus, ce que je ne veux pas si la barre des tâches est masquée.

Était-ce utile?

La solution

Essayez ceci ( ceci est votre formulaire):

this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;

Cela définira le formulaire en plein écran et couvrira la barre des tâches.

Autres conseils

J'ai essayé tellement de solutions, certaines fonctionnant sous Windows XP et toutes ne fonctionnant 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.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.F11)
        if (FormBorderStyle == FormBorderStyle.None)
        {
            FormBorderStyle = FormBorderStyle.Sizable;
            WindowState = FormWindowState.Normal;
        }
        else
        {
            SuspendLayout();
            FormBorderStyle = FormBorderStyle.None;
            WindowState = FormWindowState.Maximized;
            ResumeLayout();
        }
}

Pour autant que je sache, la barre des tâches se situe au-dessus ou au-dessous des fenêtres, en fonction de l'option "Conserver la barre des tâches au-dessus des autres fenêtres". réglage. (Du moins, c’est ce que dit XP.) Je suppose que vous pourriez essayer de voir si vous pouvez détecter ce paramètre et le basculer au besoin?

Essayez de redimensionner le formulaire et de le placer au début de l'ordre z, comme suit:

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top