Как сделать так, чтобы приложение WinForms работало в полноэкранном режиме? - PullRequest
99 голосов
/ 03 февраля 2009

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

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

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

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

Ответы [ 8 ]

139 голосов
/ 03 февраля 2009

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

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

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

19 голосов
/ 27 мая 2013

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

Я искал ответ на этот вопрос в 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 в полноэкранном режиме в верхней части панели задач? )

6 голосов
/ 03 февраля 2009

А для вопроса о менструации попробуйте установить

MenuStrip1.Parent = Nothing

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

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

5 голосов
/ 12 февраля 2013

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

    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».)

3 голосов
/ 03 февраля 2009

Я недавно сделал приложение 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
2 голосов
/ 03 февраля 2009

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

1 голос
/ 28 октября 2016

Я не знаю, будет ли это работать на .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.

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

0 голосов
/ 16 мая 2019

В событие перемещения формы добавьте это:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...