C# 以不同的分辨率在辅助屏幕上最大化窗体?
我正在开发一个简单的windows应用程序(用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
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%,是。真奇怪。。。