2008-09-22 1 views
21

Я использую Windows Vista и C# .net 3.5, но мой друг запускал программу на XP и имел ту же проблему.C# - Почему приложение полноэкранного winform не будет ВСЕГДА закрывать панель задач?

Итак, у меня есть программа на C#, которую я запускаю в фоновом режиме с помощью значка в SystemTray. У меня есть крючок клавиатуры низкого уровня, поэтому, когда я нажимаю две клавиши (Ctr + windows в этом случае), он вытащит основную форму приложения. Форма задана как полноэкранный режим в комбинированном режиме:

this.FormBorderStyle = FormBorderStyle.None; 
this.WindowState = FormWindowState.Maximized; 

Так оно и работает. Когда я нажимаю CTR + Windows, он отображает форму, независимо от того, какую программу я уделял. Но иногда панель задач по-прежнему появляется над формой, которую я не хочу. Я хочу, чтобы он всегда был полноэкранным, когда я ударил эту комбинацию клавиш.

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

У кого-нибудь есть идеи, как я могу это исправить?

EDIT: Подробнее ... Я пытаюсь добиться того же эффекта, который имеет веб-браузер, когда вы помещаете его в полноэкранный режим, или когда вы помещаете PowerPoint в режим презентации.

В форме окна вы делаете это, помещая стиль рамки в ничто и увеличивая окно. Но иногда окно не будет закрывать панель задач по какой-то причине. Половина времени.

Если у меня есть главное окно наверху, остальные будут отставать от него, когда я нажму на него, чего я не хочу, если панель задач скрыта.

ответ

18

Попробуйте это (где this ваша форма):

this.Bounds = Screen.PrimaryScreen.Bounds; 
this.TopMost = true; 

Это будет установлено форма в полноэкранном режиме, и она будет охватывать панель задач.

0

Насколько я знаю, панель задач находится над или под окнами, основываясь на настройке «Держать панель задач поверх других окон». (По крайней мере, это формулировка в XP.) Я полагаю, вы могли бы попытаться выяснить, можете ли вы определить этот параметр и переключить его, если необходимо?

+4

Неправильная практика изменения выбранных пользователем настроек в зависимости от ваших предпочтений.Лучше узнать, как использовать API для правильного поведения. – Wedge 2008-09-22 23:42:11

+0

Этот параметр применяется только к оконным приложениям, а не к полноэкранным приложениям. Потому что, когда я играю в игры или помещаю свой веб-браузер в полноэкранный режим, он закрывает панель задач. – Joel 2008-09-23 03:43:38

0

Попробуйте изменить размеры формы и приведение его к передней части г-го порядка, так как:

 Rectangle screenRect = Screen.GetBounds(this); 
     this.Location = screenRect.Location; 
     this.Size = screenRect.Size; 
     this.BringToFront(); 
1
private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.F11) 
     if (FormBorderStyle == FormBorderStyle.None) 
     { 
      FormBorderStyle = FormBorderStyle.Sizable; 
      WindowState = FormWindowState.Normal; 
     } 
     else 
     { 
      SuspendLayout(); 
      FormBorderStyle = FormBorderStyle.None; 
      WindowState = FormWindowState.Maximized; 
      ResumeLayout(); 
     } 
} 
2

Я пробовал так много решений, некоторые из них работают в 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.

Одно из преимуществ этого метода заключается в том, что TOPMOST имеет значение false, позволяющее другим формам обращаться к основной форме.

Это абсолютно решило мою проблему.

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