Comment faire pour que L'application WinForms passe en plein écran
j'ai une application WinForms que j'essaie de faire plein écran (un peu comme ce que VS fait en mode plein écran).
actuellement je mets FormBorderStyle
à None
et WindowState
à Maximized
ce qui me donne un peu plus d'espace, mais il ne couvre pas au-dessus de la barre des tâches si elle est visible.
Que dois-je faire pour utiliser l'espace ainsi?
pour les points bonus, y a-t-il quelque chose que je puisse faire pour MenuStrip
pour abandonner cet espace aussi?
7 réponses
à la question de base, ce qui suit fera l'affaire (cacher 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 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 des propriétés.
A testé solution simple et
j'ai été à la recherche d'une réponse à cette question dans SO et certains autres sites, mais l'un a donné une réponse était très complexe pour moi et d'autres réponses ne fonctionne 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-hide.
j'ai découvert que le réglage du WindowState à la normale avant d'effectuer des modifications va arrêter 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". Donc vous avez juste besoin de créer un objet de cette classe et passer le formulaire que vous voulez mettre plein écran comme un 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 Que Je ne suis pas sûr si est un duplicata ou non de celui-ci. (Lien vers l'autre question: Comment afficher un formulaire Windows en plein écran sur la barre des tâches? )
et pour l'industrie-question, essayer ensemble
MenuStrip1.Parent = Nothing
en mode plein écran, il doit se désactiver.
et à la sortie du mode plein écran, réinitialiser le menustrip1.parent
à la forme à nouveau et le ménustrip sera à nouveau normal.
vous pouvez utiliser le code suivant pour ajuster 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 d'utiliser:
this.TopMost = true;
cette ligne interfère avec alt+tab
pour passer à une autre application. ("La plus haute "signifie que la fenêtre reste au-dessus des autres fenêtres, à moins qu'elles ne soient aussi marquées"la plus haute".)
j'ai récemment fait une application Mediaplayer et j'ai utilisé des API-calls pour m'assurer que la barre des tâches était cachée lorsque le programme exécutait fullscreen et puis restauré la barre des tâches lorsque le programme n'était pas en fullscreen ou n'avait pas de focus ou était sorti.
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
Je ne sais pas si ça va marcher sur .NET 2.0, mais ça a marché sur moi 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 dans la classe de votre formulaire (exemple:
partial class Form1 : Form { /* Code goes here */ }
) ou il ne fonctionnera pas parce que si vous ne le placez sur aucun formulaire, le codethis
créera une exception.