Как сделать приложения WinForms приложение на полный экран
у меня есть приложение WinForms, которое я пытаюсь сделать полноэкранным (что-то вроде того, что VS делает в полноэкранном режиме).
Я
FormBorderStyle до None и WindowState до Maximized что дает мне немного больше места, но он не покрывает панель задач, если она видна.что мне нужно сделать, чтобы использовать это пространство, а?
для бонусных очков, есть ли что-то, что я могу сделать, чтобы сделать мой MenuStrip autohide, чтобы отказаться от этого пространства, а?
7 ответов:
к основному вопросу, следующее будет делать трюк (скрывая панель задач)
private void Form1_Load(object sender, EventArgs e) { this.TopMost = true; this.FormBorderStyle = FormBorderStyle.None; this.WindowState = FormWindowState.Maximized; }но, что интересно, если вы поменяете эти последние две строки, панель задач останется видимой. Я думаю, что последовательность этих действий будет трудно контролировать с помощью окна Свойства.
проверенное и простое решение
Я искал ответ на этот вопрос в SO и некоторых других сайтах, но один дал ответ был очень сложным для меня, а некоторые другие ответы просто не работают правильно, поэтому после Большого тестирования кода я решил эту головоломку.
Примечание: я использую Windows 8 и моя панель задач не находится в режиме автоматического скрытия.
я обнаружил, что установка WindowState в нормальное состояние перед выполнением каких-либо изменений остановится ошибка с не покрытой панелью задач.
код
Я создал этот класс, который имеет два метода, первый входит в" полноэкранный режим", а второй выходит из"полноэкранного режима". Поэтому вам просто нужно создать объект этого класса и передать форму, которую вы хотите установить в полноэкранном режиме в качестве аргумента метода 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когда в полноэкранном режиме, тогда должно исчезнуть.
и при выходе из fullscreenmode, сбросить
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для переключения на другое приложение. ("Самый верхний" означает, что окно остается поверх других окон, если они также не помечены как "самый верхний".)
недавно я сделал приложение 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; /// <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 }использование:
UpgradeFullscreen(); // Goes to fullscreen UpgradeFullscreen(); // Goes back to normal state // You don't need arguments.уведомления: Вы должны поместить его в класс своей формы (пример:
partial class Form1 : Form { /* Code goes here */ }) или это не будет работать, потому что если вы не поместите его на любой форме, кодthisсоздаст исключение.
Comments