Как сделать приложения WinForms приложение на полный экран



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



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

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



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

861   7  

7 ответов:

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

private void Form1_Load(object sender, EventArgs e)
{
    this.TopMost = true;
    this.FormBorderStyle = FormBorderStyle.None;
    this.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;
        }
    }

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

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

MenuStrip1.Parent = Nothing

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

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

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

    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 для переключения на другое приложение. ("Самый верхний" означает, что окно остается поверх других окон, если они также не помечены как "самый верхний".)

недавно я сделал приложение 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

вам нужно установить окно, чтобы быть лучшими.

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

Comments

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