Как сделать приложение WinForms полностью включенным?

У меня есть приложение WinForms, которое я пытаюсь сделать в полноэкранном режиме (что-то вроде того, что делает VS в полноэкранном режиме).

В настоящее время я устанавливаю FormBorderStyle в None и WindowState для Maximized что дает мне немного больше места, но оно не распространяется на панель задач, если оно видно.

Что мне нужно сделать, чтобы использовать это пространство?

Что касается бонусных очков, есть ли что-то, что я могу сделать, чтобы сделать MenuStrip для этого пространства?

К базовому вопросу будет применен следующий трюк (скрытие панели задач)

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

Но, что интересно, если вы поменяете эти последние две строки, панель задач останется видимой. Я думаю, что последовательность этих действий будет трудно контролировать с помощью windows свойств.

Проверенное и простое решение

Я искал ответ на этот вопрос в SO и некоторых других сайтах, но один дал ответ, был очень сложным для меня, а некоторые другие ответы просто не работают правильно, поэтому после большого тестирования кода я решил эту загадку.

Примечание. Я использую Windows 8, и моя панель задач не находится в режиме автоматического скрытия.

Я обнаружил, что установка WindowState в Normal перед выполнением любых изменений остановит ошибку с закрытой панелью задач.

Код

Я создал этот class, который имеет два метода: первый входит в полноэкранный режим, а второй оставляет «полноэкранный режим». Поэтому вам просто нужно создать объект этого classа и передать форму, которую вы хотите установить в полноэкранном режиме, в качестве аргумента методу EnterFullScreenMode или методу 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; } } 

Пример использования

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

Я поставил этот же ответ на другой вопрос, который я не уверен, является ли это дубликат или нет. (Ссылка на другой вопрос: как отобразить форму Windows в полноэкранном режиме на панели задач? )

И для вопроса menustrip, попробуйте установить

 MenuStrip1.Parent = Nothing 

когда в полноэкранном режиме он должен исчезнуть.

И, выйдя из полноэкранного menustrip1.parent снова сбросьте menustrip1.parent в форму, и menustrip снова станет нормальным.

Вы можете использовать следующий код, чтобы он соответствовал вашему системному экрану, и панель задач видна.

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

Нет необходимости использовать:

  this.TopMost = true; 

Эта строка вмешивается в alt+tab чтобы переключиться на другое приложение. («TopMost» означает, что окно остается поверх других окон, если только они не помечены как «TopMost».)

Недавно я сделал приложение Mediaplayer, и я использовал API-вызовы, чтобы убедиться, что панель задач была скрыта, когда программа запускалась в полноэкранном режиме, а затем восстановила панель задач, когда программа не была в полноэкранном режиме или не имела фокуса или была отключена.

 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 

Вам нужно установить верхнее окно.

Я не знаю, будет ли он работать на .NET 2.0, но он работал на .NET 4.5.2. Вот код:

 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 } 

Применение:

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

Обратите внимание: вы ДОЛЖНЫ разместить его внутри classа Form (пример: partial class Form1 : Form { /* Code goes here */ } ), или он не будет работать, потому что, если вы не поместите его в какую-либо форму, this приведет к созданию исключение.

  • Список vs BindingList Преимущества / Недостатки
  • передавать значение из одной формы в другую
  • Application.Exit
  • Кнопка внутри текстового windows winforms
  • Как создать событие в Usercontrol и обработать его в основной форме?
  • Как сохранить Список в Settings.Default?
  • DateTimePicker: выберите дату и время
  • Как правильно остановить BackgroundWorker
  • Как добавить движущие эффекты к моим элементам управления на C #?
  • копирование свободного рисования с панели в visual studio 2013
  • Событие, зарегистрированное в CheckedListBox?
  • Давайте будем гением компьютера.