Как отобразить форму Windows в полноэкранном режиме на панели задач?

У меня есть приложение .net для Windows, которое нужно запускать в полноэкранном режиме. Когда приложение запускается, панель задач отображается поверх основной формы и исчезает только при активации формы, нажимая на нее или используя ALT-TAB. Существующие свойства формы следующие:

  • WindowState = FormWindowState.Normal
  • TopMost = Обычный
  • Размер = 1024,768 (это разрешение экрана машин, на которых он будет работать)
  • FormBorderStyle = None

Я попытался добавить следующие данные в загрузку формы, но никто не работал у меня:

  • this.Focus(); (после выделения фокуса this.Focus свойство всегда false)
  • this.BringToFront();
  • this.TopMost = true; (это, однако, не было бы идеальным в моем сценарии)
  • this.Bounds = Screen.PrimaryScreen.Bounds;
  • this.Bounds = Screen.PrimaryScreen.Bounds;

Есть ли способ сделать это в .NET или мне придется вызывать собственные методы Windows, и если так будет очень оценен фрагмент кода.

большое спасибо

Ответ 1

Мое простое исправление получило вызов метода формы Activate(), поэтому нет необходимости использовать TopMost (к чему я стремился).

Ответ 2

Использование:

FormBorderStyle = FormBorderStyle.None
WindowState = FormWindowState.Maximized

И затем форма помещается на панель задач.

Ответ 3

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

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

Ответ 4

Вот как я делаю формы в полноэкранном режиме.

private void button1_Click(object sender, EventArgs e)
{
    int minx, miny, maxx, maxy;
    inx = miny = int.MaxValue;
    maxx = maxy = int.MinValue;

    foreach (Screen screen in Screen.AllScreens)
    {
        var bounds = screen.Bounds;
        minx = Math.Min(minx, bounds.X);
        miny = Math.Min(miny, bounds.Y);
        maxx = Math.Max(maxx, bounds.Right);
        maxy = Math.Max(maxy, bounds.Bottom);
    }

    Form3 fs = new Form3();
    fs.Activate();
    Rectangle tempRect = new Rectangle(1, 0, maxx, maxy);
    this.DesktopBounds = tempRect;
}

Ответ 5

FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
WindowState = FormWindowState.Maximized;

Ответ 6

Проверенное и простое решение

Я искал ответ на этот вопрос в SO и некоторых других сайтах, но один дал ответ, был очень сложным для меня, а некоторые другие ответы просто не работают корректно, поэтому после большого тестирования кода я решил эта головоломка.

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

Я обнаружил, что установка WindowState в Normal перед выполнением любых изменений остановит ошибку с закрытой панелью задач.

Код

Я создал этот класс, который имеет два метода, первый входит в "полноэкранный режим", а второй оставляет "полноэкранный режим". Таким образом, вам просто нужно создать объект этого класса и передать форму, которую вы хотите установить полный экран, в качестве аргумента методу EnterFullScreenMode или методу LeaveFullScreenMode:

class FullScreen
{
    public void EnterFullScreenMode(Form targetForm)
    {
        targetForm.WindowState = FormWindowState.Normal;
        targetForm.FormBorderStyle = FormBorderStyle.None;
        targetForm.WindowState = FormWindowState.Maximized;
    }

    public void LeaveFullScreenMode(Form targetForm)
    {
        targetForm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
        targetForm.WindowState = FormWindowState.Normal;
    }
}

Пример использования

    private void fullScreenToolStripMenuItem_Click(object sender, EventArgs e)
    {
        FullScreen fullScreen = new FullScreen();

        if (fullScreenMode == FullScreenMode.No)  // FullScreenMode is an enum
        {
            fullScreen.EnterFullScreenMode(this);
            fullScreenMode = FullScreenMode.Yes;
        }
        else
        {
            fullScreen.LeaveFullScreenMode(this);
            fullScreenMode = FullScreenMode.No;
        }
    }

Я поставил этот же ответ на другой вопрос, который я не уверен, является ли это дубликат или нет. (Ссылка на другой вопрос: Как сделать приложение WinForms в полноэкранном режиме)

Ответ 7

Я считаю, что это можно сделать, просто установив для свойства FormBorderStyle значение None и WindowState для Maximized. Если вы используете Visual Studio, оба из них можно найти в среде IDE, поэтому нет необходимости делать это программно. Обязательно включите какой-то способ закрытия/выхода из программы, прежде чем делать это, потому что это приведет к удалению этого полезного X в верхнем правом углу.

EDIT:

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

/*
 * A function to put a System.Windows.Forms.Form in fullscreen mode
 * Author: Danny Battison
 * Contact: [email protected]
 */

        // a struct containing important information about the state to restore to
        struct clientRect
        {
            public Point location;
            public int width;
            public int height;
        };
        // this should be in the scope your class
        clientRect restore;
                bool fullscreen = false;

        /// <summary>
        /// Makes the form either fullscreen, or restores it to it original size/location
        /// </summary>
        void Fullscreen()
        {
            if (fullscreen == false)
            {
                this.restore.location = this.Location;
                this.restore.width = this.Width;
                this.restore.height = this.Height;
                this.TopMost = true;
                this.Location = new Point(0,0);
                this.FormBorderStyle = FormBorderStyle.None;
                this.Width = Screen.PrimaryScreen.Bounds.Width;
                this.Height = Screen.PrimaryScreen.Bounds.Height;
            }
            else
            {
                this.TopMost = false;
                this.Location = this.restore.location;
                this.Width = this.restore.width;
                this.Height = this.restore.height;
                                // these are the two variables you may wish to change, depending
                                // on the design of your form (WindowState and FormBorderStyle)
                this.WindowState = FormWindowState.Normal;
                this.FormBorderStyle = FormBorderStyle.Sizable;
            }
        }

Ответ 8

У меня нет объяснений о том, как это работает, но работает, а ковбойский кодер - это все, что мне нужно.

        System.Drawing.Rectangle rect = Screen.GetWorkingArea(this);
        this.MaximizedBounds = Screen.GetWorkingArea(this);
        this.WindowState = FormWindowState.Maximized;

Ответ 9

FormBorderStyle = FormBorderStyle.Sizable;
TopMost = false;
WindowState = FormWindowState.Normal;

ЭТОТ КОД СДЕЛАТЬ ВАШ WINDOWS ПОЛНЫЙ ЭКРАН, ЭТО ТАКЖЕ ПОКРЫВАЕТ ЦЕЛЫЙ ЭКРАН