Как сделать приложение WinForms полностью включенным?

У меня есть приложение WinForms, которое я пытаюсь сделать в полноэкранном режиме (что-то вроде того, что делает VS в полноэкранном режиме).

В настоящее время я устанавливаю FormBorderStyle в None и WindowState в Maximized, что дает мне немного больше места, но оно не покрывает панель задач, если она видна.

Что мне нужно сделать, чтобы использовать это пространство?

Что касается бонусных очков, могу ли я сделать что-то, чтобы сделать autohide MenuStrip тоже отказаться от этого пространства?

Ответ 1

В базовый вопрос следующий трюк (скрытие панели задач)

private void Form1_Load(object sender, EventArgs e)
{
    this.TopMost = true;
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;
}

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

Ответ 2

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

Я искал ответ на этот вопрос в 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;
        }
    }

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

Ответ 3

И для вопроса menustrip попробуйте установить

MenuStrip1.Parent = Nothing

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

И при выходе из полноэкранного режима reset menustrip1.parent в форму снова, и menustrip будет снова нормальным.

Ответ 4

Вы можете использовать следующий код, чтобы он соответствовал вашему системному экрану, и панель задач видна.

    private void Form1_Load(object sender, EventArgs e)
    {   
        // hide max,min and close button at top right of Window
        this.FormBorderStyle = FormBorderStyle.None;
        // fill the screen
        this.Bounds = Screen.PrimaryScreen.Bounds;
    }

Не нужно использовать:

    this.TopMost = true;

Эта строка мешает alt+tab переключиться на другое приложение. ( "TopMost" означает, что окно остается поверх других окон, если только они не помечены как "TopMost".)

Ответ 5

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

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Integer, ByVal nCmdShow As Integer) As Integer

Sub HideTrayBar()
    Try


        Dim tWnd As Integer = 0
        Dim bWnd As Integer = 0
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
        ShowWindow(tWnd, 0)
        ShowWindow(bWnd, 0)
    Catch ex As Exception
        'Error hiding the taskbar, do what you want here..
    End Try
End Sub
Sub ShowTraybar()
    Try
        Dim tWnd As Integer = 0
        Dim bWnd As Integer = 0
        tWnd = FindWindow("Shell_TrayWnd", vbNullString)
        bWnd = FindWindowEx(tWnd, bWnd, "BUTTON", vbNullString)
        ShowWindow(bWnd, 1)
        ShowWindow(tWnd, 1)
    Catch ex As Exception
    'Error showing the taskbar, do what you want here..     
               End Try


End Sub

Ответ 6

Вам нужно установить верхнее окно.

Ответ 7

Я не знаю, будет ли он работать на .NET 2.0, но он работал на .NET 4.5.2. Вот код:

using System;
using System.Drawing;
using System.Windows.Forms;

public partial class Your_Form_Name : Form
{
    public Your_Form_Name()
    {
        InitializeComponent();
    }

    // CODE STARTS HERE

    private System.Drawing.Size oldsize = new System.Drawing.Size(300, 300);
    private System.Drawing.Point oldlocation = new System.Drawing.Point(0, 0);
    private System.Windows.Forms.FormWindowState oldstate = System.Windows.Forms.FormWindowState.Normal;
    private System.Windows.Forms.FormBorderStyle oldstyle = System.Windows.Forms.FormBorderStyle.Sizable;
    private bool fullscreen = false;
    /// <summary>
    /// Goes to fullscreen or the old state.
    /// </summary>
    private void UpgradeFullscreen()
    {
        if (!fullscreen)
        {
            oldsize = this.Size;
            oldstate = this.WindowState;
            oldstyle = this.FormBorderStyle;
            oldlocation = this.Location;
            this.WindowState = System.Windows.Forms.FormWindowState.Normal;
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            this.Bounds = System.Windows.Forms.Screen.PrimaryScreen.Bounds;
            fullscreen = true;
        }
        else
        {
            this.Location = oldlocation;
            this.WindowState = oldstate;
            this.FormBorderStyle = oldstyle;
            this.Size = oldsize;
            fullscreen = false;
        }
    }

    // CODE ENDS HERE
}

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

UpgradeFullscreen(); // Goes to fullscreen
UpgradeFullscreen(); // Goes back to normal state
// You don't need arguments.

Примечание: Вы ДОЛЖНЫ поместить его в свой класс Form (Пример: partial class Form1 : Form { /* Code goes here */ }) или он не будет работать, потому что, если вы не поместите его в какую-либо форму, код this создаст исключение.

Ответ 8

На Событии Перемещения Формы добавьте это:

private void Frm_Move (object sender, EventArgs e)
{
    Top = 0; Left = 0;
    Size = new System.Drawing.Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
}