全屏模式,但不要覆盖任务栏

时间:2011-06-20 17:31:43

标签: c# .net winforms

我有一个WinForms应用程序,当我登录时设置为全屏模式。

我的问题是它还覆盖了Windows任务栏。我不希望我的应用程序覆盖任务栏。

如何做到这一点?

10 个答案:

答案 0 :(得分:27)

我这样做是通过这段代码:

this.MaximizedBounds = Screen.FromHandle(this.Handle).WorkingArea;
this.WindowState = FormWindowState.Maximized;

答案 1 :(得分:19)

这可能是你想要的。它创建了一个“最大化”窗口而不隐藏任务栏。

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

    private void Form1_Load( object sender, EventArgs e )
    {
        FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        Left = Top = 0;
        Width = Screen.PrimaryScreen.WorkingArea.Width;
        Height = Screen.PrimaryScreen.WorkingArea.Height;
    }
}

答案 2 :(得分:4)

我回答了here

  

我遗漏了一些描述 - 我关闭了最大化按钮。当我测试重新打开该属性时,任务栏再次出现。显然它假设您不想要最大化按钮,而是创建一个自助服务终端风格的应用程序,您不希望用户看到除应用程序屏幕之外的任何内容。不完全是我所期望的,但我认为是有效的。

我遇到了这个问题,并在杰夫的帮助下解决了这个问题。首先,将windowstate设置为Maximized。但不要禁用MaximizeBox。然后,如果要禁用MaximizeBox,则应以编程方式执行此操作:

private void frmMain_Load(object sender, EventArgs e)
{
    this.MaximizeBox = false;
}

答案 3 :(得分:1)

如果最大化不是您想要的,那么您需要通过检查任务栏的位置和大小来自己计算窗口大小:

find-out-size-and-position-of-the-taskbar

答案 4 :(得分:1)

如果您有多个屏幕,则必须重置MaximizedBounds的位置:

Rectangle rect = Screen.FromHandle(this.Handle).WorkingArea;
rect.Location = new Point(0, 0);
this.MaximizedBounds = rect;
this.WindowState = FormWindowState.Maximized;

答案 5 :(得分:1)

我不擅长解释,但这是我用来最大化或全屏显示不会掩盖任务栏的winforms的代码。希望能帮助到你。 ^^

private void Form_Load(object sender, EventArgs e)
{
    this.Height = Screen.PrimaryScreen.WorkingArea.Height;
    this.Width = Screen.PrimaryScreen.WorkingArea.Width;
    this.Location = Screen.PrimaryScreen.WorkingArea.Location;
}

答案 6 :(得分:1)

Arcanox's answer对于单个监视器非常有用,但是如果您在除最左边以外的任何屏幕上尝试使用它,它将使表格消失。我改用以下代码。

var workingArea = Screen.FromHandle(Handle).WorkingArea;
MaximizedBounds =  new Rectangle(0, 0, workingArea.Width, workingArea.Height);
WindowState = FormWindowState.Maximized;

唯一的区别是我将上下左右的值覆盖为0、0,因为它们在其他屏幕上会有所不同。

答案 7 :(得分:0)

如果您想使用WindowState = Maximized;,则应首先指明MaximizedBounds属性最大化的表单的大小限制...

示例:

MaximizedBounds = Screen.FromHandle(this.Handle).WorkingArea;
WindowState = FormWindowState.Maximized;

您将表单的大小限制在作为显示器桌面区域的工作区域

答案 8 :(得分:0)

尝试不使用FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;和注释行,如:

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

    private void Form1_Load( object sender, EventArgs e )
    {
        // FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        Left = Top = 0;
        Width = Screen.PrimaryScreen.WorkingArea.Width;
        Height = Screen.PrimaryScreen.WorkingArea.Height;
    }
}

答案 9 :(得分:0)

private void frmGateEntry_Load(object sender, EventArgs e)
    {
        // set default start position to manual  
        this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;

        // set position and size to the Form.  
        this.Bounds = Screen.PrimaryScreen.WorkingArea;
    }