C# 以不同的分辨率在辅助屏幕上最大化窗体?

C# 以不同的分辨率在辅助屏幕上最大化窗体?,c#,winforms,multiple-monitors,maximize,C#,Winforms,Multiple Monitors,Maximize,我正在开发一个简单的windows应用程序(用C#),我希望它能在我的第二个监视器中显示一个最大化的窗体。为此,我对表单的“加载”事件执行以下操作: private void FormTest_Load(object sender, EventArgs e) { Screen[] screens = Screen.AllScreens; this.WindowState = FormWindowState.Normal; this.Loca

我正在开发一个简单的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;
    }
}
当我点击按钮两次(先是取消窗体最大化,然后再次最大化)时,窗体确实完全覆盖了整个辅助屏幕,但是如果我在“FormTest_Load”中的代码之后尝试在代码中运行该函数两次(为了测试),屏幕仍然无法正确覆盖整个屏幕


我可能在这里犯了一个noob错误,但我已经为此挣扎了一段时间,因此如果有人能解释一下我的代码有什么问题,我将不胜感激。

我已经尝试获得与您描述的相同的结果(更改分辨率等),但在我的计算机和屏幕上一切正常。可能是。。。变量
屏幕的具体内容是什么?我假设这是
屏幕。所有屏幕
,如下所示:

    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%(推荐值)

我已尝试获得与您描述的相同的结果(更改分辨率等),但在我的计算机和屏幕上都可以正常工作。可能是。。。变量
屏幕的具体内容是什么?我假设这是
屏幕。所有屏幕
,如下所示:

    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%(推荐值)

加载事件太晚,此时Winforms已处理WM_GETMINMAXINFO消息。将代码移动到构造函数中……或者,如果在其他地方执行此操作,请首先设置
位置,然后设置
边框样式,然后设置
窗口状态,然后设置
刷新()
(如果要绘制自定义边框,您会注意到)。如果你把你的应用程序DPIAVER做得更好,因为你可能会得到错误的(调整)的措施。锚定在客户端区域的控件可能会调整成不成比例的界限。谢谢你的想法,但是不幸的是,我仍然有同样的问题。负载事件太晚了。到那时,Winforms已经处理了WM_GETMINMAXINFO消息。将代码移动到构造函数中……或者,如果在其他地方执行此操作,请首先设置
位置,然后设置
边框样式,然后设置
窗口状态,然后设置
刷新()
(如果要绘制自定义边框,您会注意到)。如果你把你的应用程序DPIAVER做得更好,因为你可能会得到错误的(调整)的措施。锚定在客户端区域的控件可能会调整成不成比例的界限。谢谢你的想法,但是不幸的是,我仍然有同样的问题。抱歉,是的,我忘了加上一行“屏幕[]”。screens=Screen.AllScreens;“在我的第一篇文章中(我将编辑我的第一篇文章)。文本和应用程序设置为100%,是。真的很奇怪……对不起,是的,我忘了在我的第一篇文章中添加“Screen[]screens=Screen.AllScreens;”一行(我将编辑我的第一篇文章)。文本和应用程序设置为100%,是。真奇怪。。。