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


этот вопрос уже есть ответ здесь:

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

  • WindowState=FormWindowState.Нормально
  • Самый Верхний=Нормальный
  • размер=1024,768 (это разрешение экрана машин, на которых он будет работать)
  • FormBorderStyle = None

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

  • этого.Фокус (); (после предоставления фокуса это.Акцент недвижимость всегда ложь)
  • этого.BringToFront();
  • этого.TopMost = true; (это, однако, не было бы идеальным в моем сценарии)
  • этого.Границы = Экран.PrimaryScreen.Границы;
  • этого.Границы = Экран.PrimaryScreen.Границы;

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

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

9 56

9 ответов:

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

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

и затем ваша форма помещается над панелью задач.

Я пробовал так много решений, некоторые из них работает на 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 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;
}

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

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

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

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

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

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

код

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

Я считаю, что это можно сделать, просто установив свойство 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: gabehabe@googlemail.com
 */

        // 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's 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;
            }
        }

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

        System.Drawing.Rectangle rect = Screen.GetWorkingArea(this);
        this.MaximizedBounds = Screen.GetWorkingArea(this);
        this.WindowState = FormWindowState.Maximized;
FormBorderStyle = FormBorderStyle.Sizable;
TopMost = false;
WindowState = FormWindowState.Normal;

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