一尘不染

Visual Studio设计器中窗体的大小是否限于屏幕分辨率?

c#

为什么在Visual Studio
WinForms设计器中我无法将Form的大小增加到当前正在处理的屏幕分辨率之上?我认为应该可以在较低分辨率的系统上开发针对更高分辨率的应用程序。这将在调试过程中剪切表格的事实不应该成为问题。在Visual
Studio中为此可能有一些设置,我似乎找不到?

编辑:我的主要问题是我需要能够在具有(例如)1360x768屏幕的笔记本电脑上设计(例如)1440x900大小的表格。


阅读 773

收藏
2020-05-19

共1个答案

一尘不染

不幸的是(我希望其他人会发布更好的解决方案!),我知道的唯一解决方法是在表单内放置一个面板。

将父窗体的Autoscroll
AutoSize属性设置为true。然后将面板尺寸增加到所需的尺寸。表单本身仍不会比屏幕分辨率大,但会显示滚动条,因此至少您可以使用设计器将超出大小限制的控件等拖放到较大的面板上。

然后,您可能需要添加一些代码以在运行时调整表单的大小,以使其足够大以显示没有滚动条的面板(并且可能还禁用了Autoscroll属性)。

我知道,这不是一个特别好的解决方法…

编辑

看起来这是有意设计的:

MSDN

属性Form.Size:此属性的最大值受运行表单的屏幕的分辨率限制。在每个屏幕尺寸(水平+ 12和垂直+ 12)上,该值不能大于12个像素。

并再次在Microsoft Connect
/公共错误跟踪中

由Microsoft发布于2008年10月9日上午12:18

感谢您对.NET Framework的反馈!

您报告的问题实际上是设计使然。

http://msdn.microsoft.com/zh-
cn/library/25w4thew.aspx的 MSDN中,您可以在主题Form.Size属性中找到以下信息:

此属性的最大值受运行表单的屏幕的分辨率限制。在每个屏幕尺寸(水平+ 12和垂直+ 12)上,该值不能大于12个像素。

因此,我们不能无限扩大我们的形式。此行为与其他软件,如记事本和Microsoft Paint一致。

此行为是通过以下代码在Form.SetBoundsCore(…)中定义的:

最大大小= SystemInformation.MaxWindowTrackSize;

如果(高度>最大高度){

height = max.Height; }

如果(宽度>最大宽度){

width = max.Width; }

[…]

谢谢,UIFx团队

编辑2

由于检查是像Forms.SetBoundsCore这样硬编码的(使用ILSpy作为反编译器):

if (this.WindowState == FormWindowState.Normal && (base.Height != height || base.Width != width))
    {
        Size maxWindowTrackSize = SystemInformation.MaxWindowTrackSize;
        if (height > maxWindowTrackSize.Height)
        {
            height = maxWindowTrackSize.Height;
        }
        if (width > maxWindowTrackSize.Width)
        {
            width = maxWindowTrackSize.Width;
        }
    }

并且SetBoundsCore是受保护的函数,也许您可​​以尝试从Windows.Forms.Form派生一个类,重写SetBoundsCore而不在您的SetBoundsCore版本中强制执行此检查?我还没有尝试过是否可以…

2020-05-19