C # - Почему полноэкранное приложение winform НЕ ВСЕГДА закрывает панель задач?
-
02-07-2019 - |
Вопрос
Я использую Windows Vista и C#.net 3.5, но мой друг запустил программу на XP, и у него такая же проблема.
Итак, у меня есть программа на C #, которая работает в фоновом режиме со значком в SystemTray.У меня низкоуровневая клавиатура, поэтому, когда я нажимаю две клавиши (в данном случае Ctr + Windows), она выводит основную форму приложения.Форма настроена на полноэкранный режим с помощью комбинированного обработчика нажатия клавиши even:
this.FormBorderStyle = FormBorderStyle.None;
this.WindowState = FormWindowState.Maximized;
Так что в принципе это работает.Когда я нажимаю CTR + Windows, появляется форма, независимо от того, на какой программе я сосредоточился.Но иногда панель задач по-прежнему отображается поверх формы, чего я не хочу.Я хочу, чтобы он всегда был во весь экран, когда я нажимаю эту комбинацию клавиш.
Я полагаю, это как-то связано с тем, на каком приложении изначально был сфокусирован фокус.Но даже когда я нажимаю на свою основную форму, панель задач иногда остается там.Поэтому я задаюсь вопросом, действительно ли проблема в сосредоточенности.Просто иногда кажется, что панель задач упрямится и не хочет сидеть за моей программой.
У кого-нибудь есть какие-нибудь идеи, как я могу это исправить?
Редактировать:Подробнее- Я пытаюсь добиться того же эффекта, что и веб-браузер, когда вы переводите его в полноэкранный режим или когда вы переводите PowerPoint в режим презентации.
В форме Windows вы делаете это, устанавливая стиль границы равным none и максимизируя окно.Но иногда окно по какой-то причине не закрывает панель задач.В половине случаев так и будет.
Если у меня самое верхнее главное окно, остальные будут находиться за ним, когда я нажму на него, чего я не хочу, если панель задач скрыта.
Решение
Попробуйте это (где this
это ваша форма):
this.Bounds = Screen.PrimaryScreen.Bounds;
this.TopMost = true;
Это установит форму в полноэкранный режим, и она закроет панель задач.
Другие советы
Я перепробовал так много решений, некоторые из них работают в 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 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();
}
}
Насколько я знаю, панель задач находится либо над, либо под Windows в зависимости от параметра "Держать панель задач поверх других окон".(По крайней мере, так сформулировано в XP.) Я полагаю, вы могли бы попробовать посмотреть, сможете ли вы обнаружить этот параметр и переключить его при необходимости?
Попробуйте изменить размер формы и переместить ее в начало z-порядка следующим образом:
Rectangle screenRect = Screen.GetBounds(this);
this.Location = screenRect.Location;
this.Size = screenRect.Size;
this.BringToFront();