2015-09-28 5 views
4

У меня есть приложение WinForms (.NET 4), которое должно отображаться либо полноэкранным, либо максимизированным без границ.Полный экран Windows Form выходит за пределы размеров экрана

Используя следующий код в Form_Shown события:

#if (DEBUG) 
    var debug = true; 
#else 
    var debug = false; 
#endif 

this.Text = ""; 
this.ControlBox = false; 
this.ShowInTaskbar = true; 
//this.TopMost = debug; 
this.TopLevel = true; 
this.FormBorderStyle = FormBorderStyle.None; 

if (debug) { this.Bounds = Screen.FromControl(this).WorkingArea; } 
else { this.WindowState = FormWindowState.Maximized; } 

Если вы внимательно посмотрите на скриншот ниже, верхние и нижние участки отрезаны несколько пикселей. Кроме того, если это значение максимизировано, окно по-прежнему не охватывает панель задач.

Обратите внимание, что у меня есть только один монитор. Нет дополнительных дисплеев.

Любые предложения относительно того, как решить два вышеуказанных вопроса, будут оценены.

Screenshot of app in maximized mode

UPDATE: Код выше, кажется, работает нормально с формами без MenuStrip или StatusStrip.

+0

всегда на панели задач появляется поверх окон, даже если он установлен в Auto-Hide. Также обратите внимание, что согласно документации [WorkingArea's] (https://msdn.microsoft.com/en-us/library/system.windows.forms.screen.workingarea (v = vs.110) .aspx), она * doesn ' t * учитывайте размер сложенной панели задач в режиме Auto-Hide. Вы пытаетесь создать приложение для киоска? –

+0

@utility: обновлен снимок экрана. Откройте изображение в полном размере и посмотрите на верхнюю панель меню и нижнюю полосу состояния. Вероятно, формы Bounds начинаются с нуля (Y1) и, кажется, заканчиваются на высоте, превышающей высоту рабочей области (Y2). –

+1

FWIW, я пробовал ваш код, и в обоих случаях (отладка или нет) он работал, как ожидалось, на моем мониторе, без обрезки. Ваш код кажется прекрасным, но не знаю, почему он не работает в вашем случае. –

ответ

4

Вот код, который я использую для полноэкранного просмотра. Я создаю FullScreen свойство для моей формы, и когда мне нужно, я поставил this.FullScreen = true;

private bool fullScreen = false; 
[DefaultValue(false)] 
public bool FullScreen 
{ 
    get 
    { 
     return fullScreen; 
    } 
    set 
    { 
     fullScreen = value; 

     if (value) 
     { 
      //this.SuspendLayout(); 
      this.WindowState = FormWindowState.Normal; 
      FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
      WindowState = FormWindowState.Maximized; 
      //this.ResumeLayout(true); 
     } 
     else 
     { 
      this.Activate(); 
      this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; 
     } 
    } 
} 
+0

Спасибо. Кажется, что установка 'WindowState' в' Normal' перед установкой 'FormBorderStyle' делает трюк. Вероятно, это связано с тем, что в дизайнере была задана максимальная форма. –

+0

Это еще один вопрос, но приостановление/возобновление макета в моем случае не помогло. Существует множество настроек пользовательского интерфейса с помощью кода и много мерцания при запуске. –

+0

@ RaheelKhan Я не проверял его реальную эффективность, но на основе ожиданий от этих методов я использовал их. –

Смежные вопросы