【问题标题】:How to fit Windows Form to any screen resolution?如何使 Windows 窗体适合任何屏幕分辨率?
【发布时间】:2011-07-01 18:54:45
【问题描述】:

我使用 C# 在 VS 2008 上工作。下面的代码对我不起作用。我的表单设计为 1024 x 768 分辨率。

我们客户的笔记本电脑分辨率为 1366 x 768。为了解决这个问题,我在表单加载事件中设置了以下代码:

this.Location = new Point(0, 0);
this.Size = Screen.PrimaryScreen.WorkingArea.Size;

但表单不会根据屏幕分辨率调整大小,并且我的表单底部被隐藏或剪切,或者我错过了滚动条。

有什么办法可以解决这个问题吗?请告诉我语法。提前致谢

【问题讨论】:

标签: c# winforms c#-3.0 desktop-application


【解决方案1】:

你不能开始最大化吗?

System.Windows.Forms.Form.WindowState 属性设置为FormWindowState.Maximized

【讨论】:

  • 我已经使用了这个过程,但是我的表单有很多控件,在更改分辨率时不适合。特别是当用户在笔记本电脑上查看时
  • 这是您应用程序中的布局问题。您可能应该使用较少的固定位置布局和更多的锚定等。
  • @shamim:您告诉我们您的表单是为 1024x768 设计的,但在笔记本电脑的显示器上——它具有更高的分辨率——控件不适合?跨度>
  • 我觉得他说的是对接。在表单上创建面板,将控件放入其中,并将它们停靠到 TOP LEFT MIDDLE RIGHTBOTTOM。然后,当您最大化或放大表单(用户/程序化)时,一切都会效仿。
【解决方案2】:

如果您想以编程方式设置表单大小,请将表单的StartPosition 属性设置为Manual。否则表单自身的定位和大小调整算法会干扰您的。这就是您遇到问题中提到的问题的原因。

示例:以下是我如何将表单大小调整到其原始大小和屏幕工作区域大小之间的一半大小。我还将表单置于工作区域的中心:

public MainView()
{
    InitializeComponent();

    // StartPosition was set to FormStartPosition.Manual in the properties window.
    Rectangle screen = Screen.PrimaryScreen.WorkingArea;
    int w = Width >= screen.Width ? screen.Width : (screen.Width + Width) / 2;
    int h = Height >= screen.Height ? screen.Height : (screen.Height + Height) / 2;
    this.Location = new Point((screen.Width - w) / 2, (screen.Height - h) / 2);
    this.Size = new Size(w, h);
}

请注意,单独将WindowState 设置为FormWindowState.Maximized 不会改变恢复窗口的大小。因此,窗口在最大化时可能看起来不错,但在恢复时,窗口大小和位置仍然可能是错误的。因此,即使您打算将窗口打开为最大化,我也建议设置大小和位置。

【讨论】:

    【解决方案3】:

    可能最大化表单会有所帮助,或者您可以在表单加载时手动执行此操作:

    代码块

    this.Location = new Point(0, 0);
    
    this.Size = Screen.PrimaryScreen.WorkingArea.Size;
    

    然后,使用锚定,让表单内的子控件自动适应表单的新大小。

    希望对你有帮助,

    【讨论】:

      【解决方案4】:

      设置表单属性以最大化状态打开。

      this.WindowState = FormWindowState.Maximized;
      

      【讨论】:

        【解决方案5】:
        int h = Screen.PrimaryScreen.WorkingArea.Height;
        int w = Screen.PrimaryScreen.WorkingArea.Width;
        this.ClientSize = new Size(w , h);
        

        【讨论】:

        • 我建议您添加一些解释,因为不鼓励仅使用代码的答案。
        【解决方案6】:

        你可以简单的设置窗口状态

        this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
        

        【讨论】:

        • 什么是最大化?
        【解决方案7】:

        只需为您的 Windows 窗体设置 Autoscroll = true ..(它不是很好的解决方案,但很有帮助)..

        也试试面板(Autoscroll property = true)

        【讨论】:

          【解决方案8】:

          您总是可以告诉窗口以最大化开始...它应该给您相同的结果...就像这样:this.WindowState = FormWindowState.Maximized;

          附:您也可以尝试(我不建议这样做)减去任务栏高度。

          【讨论】:

            猜你喜欢
            • 2023-03-18
            • 1970-01-01
            • 2016-08-25
            • 2011-09-04
            • 2016-02-10
            • 1970-01-01
            • 2017-02-11
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多