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