2013-02-10 2 views
1

Я использую C#, чтобы предоставить «полноэкранный режим» приложения, используя форму без полей и метод максимизации. Это работает отлично, когда я делаю форму без полей, пока она не максимизирована - все, что вы можете видеть на экране, - это форма, панель задач покрыта. Однако, если я максимизирую форму вручную (взаимодействие с пользователем), а затем попытаюсь сделайте его без границ & максимизировано, панель задач нарисована над формой (поскольку я не использую WorkArea, часть элементов управления в форме скрыта. Предназначенное поведение НЕ отображает панель задач). Я попытался установить свойство формы TopMost в true, но это, похоже, не имеет никакого эффекта.Максимизация формы без полей закрывает панель задач только при максимальном размере от нормального размера

Есть ли способ переделать это, чтобы всегда закрывать панель задач?

if (this.FormBorderStyle != System.Windows.Forms.FormBorderStyle.None) 
    {   
    this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; 
    } 
    else 
    { 
     this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable; 
    } 
    if (this.WindowState != FormWindowState.Maximized) 
    { 
    this.WindowState = FormWindowState.Maximized; 
    } 
    else 
    { 
     if (this.FormBorderStyle == System.Windows.Forms.FormBorderStyle.Sizable) this.WindowState=FormWindowState.Normal; 
    } 

ответ

1

Однако, если я максимально форме вручную (взаимодействие с пользователем) ...

Проблема в том, что ваше окно уже внутренне отмечено как находящееся в максимизированном состоянии. Поэтому максимизация этого снова не изменит текущий размер формы. Который оставит панель задач открытой. Сначала вам нужно восстановить его обратно в Normal, а затем вернуться к Maximized. Да, это немного мерцает.

private void ToggleStateButton_Click(object sender, EventArgs e) { 
     if (this.FormBorderStyle == FormBorderStyle.None) { 
      this.FormBorderStyle = FormBorderStyle.Sizable; 
      this.WindowState = FormWindowState.Normal; 
     } 
     else { 
      this.FormBorderStyle = FormBorderStyle.None; 
      if (this.WindowState == FormWindowState.Maximized) this.WindowState = FormWindowState.Normal; 
      this.WindowState = FormWindowState.Maximized; 
     } 
    } 
0

Не знаю, почему это происходит, и я ненавижу приложения, которые предполагают, что они могут взять все мои экрана. Хотя это может быть приемлемым для 1024x768 дисплеев, мой дисплей 30" впустую, когда проклятая вещь решает, что владеет мой экраном.

Так что мое сообщение, может сосредоточиться на том, что все ваши управления видны, а не сосредотачиваться при максимизации окна.

Вы всегда можете обнаружить изменения размера окна, а затем переопределить поведение по умолчанию, заботясь о неожиданной проблеме, с которой вы сталкиваетесь. Вместо того, чтобы максимизировать и отображать все 30-дюймовые дисплеи, окно должно быть и установить размер соответственно.

Мои 2 цента, что является именно то, что мои мысли стоит;)

+1

John, разрабатываемое приложение не является общедоступным приложением, ожидается, что производственная среда полностью отключит панель задач; однако, для чистоты я хотел бы проверить, что мое приложение может обрабатывать Windows с включенной панелью задач. Кроме того, этот конкретный сценарий используется для создания полноэкранного режима рендеринга VMR9. Вы согласитесь, что просмотр какого-то видео более приятен, если у вас нет этой панели задач? – zaitsman

0

Вы можете попробовать использовать метод WinApi SetWindowPos, как это:

public static class WinApi 
{ 
    [DllImport("user32.dll")] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, 
            int x, int y, int width, int height, 
            uint flags); 

    static readonly IntPtr HWND_TOPMOST = new IntPtr(-1); 
    const uint SWP_NOSIZE = 0x0001; 
    const uint SWP_NOMOVE = 0x0002; 
    const uint SWP_SHOWWINDOW = 0x0040; 

    public static void SetFormTopMost(Form form) 
    { 
     SetWindowPos(form.Handle, HWND_TOPMOST, 0, 0, 0, 0, 
        SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); 
    } 
} 

В вашей форме называют это так:

WinApi.SetFormTopMost(this); 
Смежные вопросы