C # - Почему полноэкранное приложение winform НЕ ВСЕГДА закрывает панель задач?

StackOverflow https://stackoverflow.com/questions/118130

Вопрос

Я использую 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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top