¿Cómo hago para que una aplicación de WinForms pase a pantalla completa?

Tengo una aplicación WinForms que bash hacer en pantalla completa (algo así como lo que VS hace en modo de pantalla completa).

Actualmente estoy configurando FormBorderStyle en None y WindowState en Maximized que me da un poco más de espacio, pero no cubre la barra de tareas si está visible.

¿Qué debo hacer para usar ese espacio también?

Para obtener puntos de bonificación, ¿hay algo que pueda hacer para que mi MenuStrip oculte automáticamente y también renuncie a ese espacio?

A la pregunta base, lo siguiente hará el truco (ocultando la barra de tareas)

 private void Form1_Load(object sender, EventArgs e) { this.TopMost = true; this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized; } 

Pero, curiosamente, si intercambia esas dos últimas líneas, la barra de tareas permanece visible. Creo que la secuencia de estas acciones será difícil de controlar con la ventana de propiedades.

Una solución probada y simple

He estado buscando una respuesta para esta pregunta en SO y en algunos otros sitios, pero uno me dio una respuesta que fue muy compleja y otras respuestas simplemente no funcionan correctamente, así que después de muchas pruebas de código resolví este rompecabezas.

Nota: estoy usando Windows 8 y mi barra de tareas no está en modo de ocultación automática.

Descubrí que establecer WindowState en Normal antes de realizar cualquier modificación detendrá el error con la barra de tareas no cubierta.

El código

Creé esta clase que tiene dos métodos, la primera entra en el “modo de pantalla completa” y la segunda deja el “modo de pantalla completa”. Así que solo necesita crear un objeto de esta clase y pasar el Formulario que desea establecer a pantalla completa como argumento para el método EnterFullScreenMode o para el método 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; } } 

Ejemplo de uso

  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; } } 

He colocado esta misma respuesta en otra pregunta que no estoy seguro si es un duplicado o no de este. (Enlace a la otra pregunta: ¿Cómo mostrar un formulario de Windows en pantalla completa en la parte superior de la barra de tareas? )

Y para la pregunta menustrip, intenta establecer

 MenuStrip1.Parent = Nothing 

cuando está en modo de pantalla completa, debería desaparecer.

Y al salir del modo de pantalla completa, restablezca el menustrip1.parent al formulario nuevamente y el menú secundario volverá a ser normal.

Puede usar el siguiente código para adaptarse a la pantalla de su sistema y la barra de tareas 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; } 

No es necesario usar:

  this.TopMost = true; 

Esa línea interfiere con alt+tab para cambiar a otra aplicación. (“TopMost” significa que la ventana permanece encima de otras ventanas, a menos que también estén marcadas como “TopMost”).

Hace poco hice una aplicación de MediaPlayer y usé API-calls para asegurarme de que la barra de tareas estaba oculta cuando el progtwig se ejecutaba a pantalla completa y luego restauré la barra de tareas cuando el progtwig no estaba en pantalla completa o no tenía foco o se salía.

 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 

Debes configurar tu ventana para que sea la más alta.

No sé si funcionará en .NET 2.0, pero me funcionó en .NET 4.5.2. Aquí está el código:

 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; ///  /// Goes to fullscreen or the old state. ///  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 } 

Uso:

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

Aviso: DEBE colocarlo dentro de la clase de su Formulario (Ejemplo: partial class Form1 : Form { /* Code goes here */ } ) o no funcionará porque si no lo coloca en ninguna forma, el código creará un excepción.