首页 > 解决方案 > 在不同分辨率的辅助屏幕上最大化表格?

问题描述

我正在开发一个简单的 Windows 应用程序(在 C# 中),我希望它显示一个在我的第二个监视器中最大化的表单。为此,我对表单的“加载”事件执行以下操作:

private void FormTest_Load(object sender, EventArgs e)
    {
        Screen[] screens = Screen.AllScreens;
        this.WindowState = FormWindowState.Normal;
        this.Location = screens[1].WorkingArea.Location;
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;                    
    }

我遇到的问题是,当我执行此操作时,表单仅占据屏幕的一部分。我的主屏幕的分辨率为 1024x768,而我的辅助屏幕的分辨率为 1920x1080,并且似乎表单在我的辅助屏幕中占据了主屏幕的大小。

另外,我有一个按钮,它运行以下代码以最大化屏幕或将其恢复正常:

private void ChangeSize() {
    if (this.WindowState == System.Windows.Forms.FormWindowState.Maximized)
    {
        this.WindowState = System.Windows.Forms.FormWindowState.Normal;
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Sizable;
    }
    else
    {
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
    }
}

当我单击按钮两次(首先取消最大化表单,然后再次最大化它)时,表单确实完美地覆盖了整个辅助屏幕,但是如果我尝试在代码中运行该函数两次(为了testing)在“FormTest_Load”中的代码之后,屏幕仍然无法正确覆盖整个屏幕。

我可能在这里犯了一个菜鸟错误,但我已经为此苦苦挣扎了一段时间,所以如果有人能阐明我的代码有什么问题,我将不胜感激。

标签: c#winformsmultiple-monitorsmaximize

解决方案


我试图获得与您描述的相同的结果(更改分辨率等),但在我的计算机和屏幕上一切正常。可能是......变量到底是什么screens?我假设是Screen.AllScreens这样的:

    protected override void OnLoad(EventArgs e)
    {
        Screen[] screens = Screen.AllScreens;
        int screenNumber = 1;

        this.WindowState = FormWindowState.Normal;
        this.Location = screens[screenNumber].WorkingArea.Location;
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
        this.WindowState = FormWindowState.Maximized;
    }

正如我所说,它对我来说很好。此外,您可以检查计算机的屏幕设置:文本和应用程序的大小是否设置为100% (recommended value)


推荐阅读