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



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

904   5  

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

    Ничего не найдено.