Как отобразить форму Windows в полноэкранном режиме в верхней части панели задач? [дубликат]
этот вопрос уже есть ответ здесь:
У меня есть приложение .net windows, которое должно работать в полноэкранном режиме. Однако при запуске приложения панель задач отображается поверх основной формы и исчезает только при активации формы щелчком мыши на нем или с помощью ALT-TAB. Текущие свойства формы следующие:
- WindowState=FormWindowState.Нормально
- Самый Верхний=Нормальный
- размер=1024,768 (это разрешение экрана машин, на которых он будет работать)
- FormBorderStyle = None
Я пробовал добавлять следующие формы загрузки, но никто не работал для меня:
- этого.Фокус (); (после предоставления фокуса это.Акцент недвижимость всегда ложь)
- этого.BringToFront();
- этого.TopMost = true; (это, однако, не было бы идеальным в моем сценарии)
- этого.Границы = Экран.PrimaryScreen.Границы;
- этого.Границы = Экран.PrimaryScreen.Границы;
есть ли способ сделать это в .NET или мне придется вызывать собственные методы windows, и если да, то фрагмент кода будет очень оценен.
большое спасибо
9 ответов:
использование:
FormBorderStyle = FormBorderStyle.None; WindowState = FormWindowState.Maximized;
и затем ваша форма помещается над панелью задач.
Я пробовал так много решений, некоторые из них работает на Windows XP и все они не работают на Windows 7. Ведь я пишу простой способ сделать это.
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; } }
порядок кода важен и не будет работать, если вы измените место WindwosState и FormBorderStyle.
одним из преимуществ этого метода является то, что он оставляет самый верхний на false, что позволяет другим формам переходить через основную форму.
это абсолютно решило мою проблему.
вот как я делаю формы в полноэкранном режиме.
private void button1_Click(object sender, EventArgs e) { int minx, miny, maxx, maxy; inx = miny = int.MaxValue; maxx = maxy = int.MinValue; foreach (Screen screen in Screen.AllScreens) { var bounds = screen.Bounds; minx = Math.Min(minx, bounds.X); miny = Math.Min(miny, bounds.Y); maxx = Math.Max(maxx, bounds.Right); maxy = Math.Max(maxy, bounds.Bottom); } Form3 fs = new Form3(); fs.Activate(); Rectangle tempRect = new Rectangle(1, 0, maxx, maxy); this.DesktopBounds = tempRect; }
мое простое исправление оказалось вызовом формы
Activate()
метод, так что нет необходимости использоватьTopMost
(это то, к чему я стремился).
FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 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; } }
Я разместил это же ответ на другой вопрос, что я не уверен, является ли дубликат или нет этого. (Ссылка на другой вопрос: как сделать приложение WinForms перейти на полный экран)
Я считаю, что это можно сделать, просто установив свойство FormBorderStyle в None, а WindowState-в Maximized. Если вы используете Visual Studio, оба из них можно найти в IDE, поэтому нет необходимости делать это программно. Обязательно включите какой-либо способ закрытия/выхода из программы, прежде чем делать это, потому что это удалит этот о так полезный X в правом верхнем углу.
EDIT:
попробуйте это вместо этого. Это фрагмент, который я хранил для долгое время. Я даже не могу вспомнить, кому это приписать, но это работает.
/* * A function to put a System.Windows.Forms.Form in fullscreen mode * Author: Danny Battison * Contact: gabehabe@googlemail.com */ // a struct containing important information about the state to restore to struct clientRect { public Point location; public int width; public int height; }; // this should be in the scope your class clientRect restore; bool fullscreen = false; /// <summary> /// Makes the form either fullscreen, or restores it to it's original size/location /// </summary> void Fullscreen() { if (fullscreen == false) { this.restore.location = this.Location; this.restore.width = this.Width; this.restore.height = this.Height; this.TopMost = true; this.Location = new Point(0,0); this.FormBorderStyle = FormBorderStyle.None; this.Width = Screen.PrimaryScreen.Bounds.Width; this.Height = Screen.PrimaryScreen.Bounds.Height; } else { this.TopMost = false; this.Location = this.restore.location; this.Width = this.restore.width; this.Height = this.restore.height; // these are the two variables you may wish to change, depending // on the design of your form (WindowState and FormBorderStyle) this.WindowState = FormWindowState.Normal; this.FormBorderStyle = FormBorderStyle.Sizable; } }