C # - Почему полноэкранное приложение winform ВСЕГДА не покрывает панель задач? - PullRequest
21 голосов
/ 23 сентября 2008

Я использую Windows Vista и C # .net 3.5, но мой друг запустил программу на XP и у меня возникла та же проблема.

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

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

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

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

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

РЕДАКТИРОВАТЬ: Подробнее Я пытаюсь добиться того же эффекта, что и веб-браузер, когда вы переводите его в полноэкранный режим или переводите PowerPoint в режим презентации.

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

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

Ответы [ 5 ]

18 голосов
/ 23 сентября 2008

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

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

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

2 голосов
/ 15 января 2012

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

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

1 голос
/ 26 августа 2010
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();
        }
}
0 голосов
/ 23 сентября 2008

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

        Rectangle screenRect = Screen.GetBounds(this);
        this.Location = screenRect.Location;
        this.Size = screenRect.Size;
        this.BringToFront();
0 голосов
/ 23 сентября 2008

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

...