在不同分辨率的辅助屏幕上最大化表格?

问题描述

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

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;
    }
}

当我两次单击按钮时(首先是使表单最小化,然后再次使其最大化),该表单确实覆盖了整个辅助屏幕,但是如果我尝试只在代码中运行该函数两次(对于为了进行测试),在“ FormTest_Load”中的代码之后,屏幕仍然无法正确覆盖整个屏幕。

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

解决方法

我试图获得与您描述的结果相同的结果(更改分辨率等),但是在我的计算机和屏幕上一切正常。可能是……变量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)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...