【问题标题】:Maximizing form on secondary screen with different resolution?在不同分辨率的辅助屏幕上最大化表格?
【发布时间】:2020-09-22 12:39:40
【问题描述】:

我正在开发一个简单的 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”中的代码之后,屏幕仍然无法正确覆盖整个屏幕。

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

【问题讨论】:

  • Load 事件为时已晚,此时 Winforms 已经处理了 WM_GETMINMAXINFO 消息。将代码移到构造函数中。
  • ...或者,如果您在其他地方执行此操作,请先设置Location,然后设置BorderStyle,然后设置WindowState,然后设置Refresh()(如果您正在绘制自定义你会注意到边框)。如果你制作你的应用程序 DpiAware 也会更好,因为否则你可能会得到错误(调整)的措施。
  • 锚定在 ClientArea 中间的控件可能会调整到不成比例的边界。
  • 谢谢你们的想法,但不幸的是我仍然遇到同样的问题。

标签: c# winforms multiple-monitors maximize


【解决方案1】:

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

【讨论】:

  • 抱歉,是的,我忘了添加“Screen[]screens = Screen.AllScreens;”行在我的第一篇文章中(我将编辑我的第一篇文章)。文本和应用程序设置为 100%,是的。确实很奇怪……
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多