我的Windows窗体在构建时不断缩小/resize

我正在开发一个Windows窗体项目。 它包含一个标签控制器,每个页面都有多个页面和多个控件。

看来,相对于最近,在一些forms更改之后,每次构建和运行解决方案时,表单都会resize/缩小。

因此,如果我将表单高度的大小设置为768,一旦我单击“开始”构建并运行它,我实际上可以看到它在此过程中调整自身大小,然后表单加载比高度值短21个像素它正在建设中。

如果我继续构建和运行我的项目,表单每次将减少21个像素,使每个构建它变得越来越小。

我们认为在将“DataGridView”控制器添加到其中一个选项卡时可能已经引入了,但我们还没有certificate是否是这种情况。

有没有理由为什么会这样,有什么可以做到这一点? 为什么它会在构建运行时自行resize?

这是一个烦人的错误,我自己也遭遇过类似的行为。 但是,可能会有一些解决方法,但是要注意,这些可能会有所帮助,也可能没有帮助,听起来有点hacky。

解决方案1

如果您的控件未停靠,则停靠可能有所帮助。

解决方案2

您可以更改DPI设置以消除问题,即:

显示属性设置选项卡→ 高级 。 在“ 高级”对话框中,我将“DPI设置”从 (120 dpi)更改为正常 (96 dpi)。

解决方案3

这可能是由于AutoScaleMode属性。 您的表单可能使用与Windows显示设置中不同的DPI或字体设置进行设计。 尝试在表单和违规控件中将AutoScaleMode属性设置为None,它们将不再自动重新resize。

问题

显然,Visual Studio 2015中存在一个错误。在满足某些条件时,它无法正确计算Size 。 在我的情况下,我使用以下…

 (Name): Form1 AutoScaleMode: Font AutoSizeMode: GrowOnly DoubleBuffered: True Font: Verdana, 8.25pt FormBorderStyle: FixedDialog Icon: (Icon) MaximizeBox: False MinimizeBox: False MinimumSize: 600, 170 Size: 600, 170 StartPosition: CenterParent Text: MyTitle 

现在……如果您关闭此表单并将其打开,则Size仍然完全相同(600,170) 。 如果您更改以下属性…

 ControlBox: False 

然后你关闭表格并打开它,你会注意到Size现在已经改为(610,203)

我的猜测是这个bug不能解释两件事。 一个是表单标题栏HEIGHT。 另一个是标题栏图标WIDTH。 这将是WIDTH of 10像素和HEIGHT of 33像素的偏移。

解决方案

那么你实际上有三个解决方法。 一个是抵消MinimumSize 。 另一个是实际显示ControlBox 。 最后一个是通过在初始化表单后设置ControlBox属性来修复代码中的问题。

MinimumSize

因此,第一个选项是抵消你想要的MinimumSize (w:10,h:33) 。 因此,例如,如果您希望MinimumSize MinimumSize ),则需要将其设置为 MinimumSize 。 那实际上会产生你期望看到的尺寸。

显示ControlBox

只需更改以下属性……

 ControlBox: True 

用代码纠正问题:

您需要在设计时更改以下属性…

 ControlBox: True 

然后,您需要在初始化表单后将ControlBox属性设置为False

 public Form1() { InitializeComponent(); this.ControlBox = false; } 

我有同样的问题。 我的解决方案

我的电脑系统是Windows 10.显示器的分辨率为125%,我将其设置为100%。 然后我设置表单的大小,而不是更改。

您可以在此图片中查看分辨率设置:

分辨率设置

土耳其语“Scale”是“Ölçekle”。 底部有解决方案选项(“ölçeklevedüzenle”)。

我想到了!

如果单击“设计视图”“属性”“最小化框”中的表单,则将“True”更改为“False”

好的,首先回应Saruman建议的解决方案..

  1. 应用程序中的所有控制器都没有停靠值。 少数几个被锚定,但没有一个出现停靠。 我停靠了几个我能找到的主要容器,但似乎并没有多大区别。 不可否认,我没有停靠每一个控制器,但后来我转到了解决方案2 ……

  2. 我不知道在哪里可以找到DPI设置。 无论是在Visual Studio中的某个地方,还是在我的机器上。 所以我提出了建议的解决方案3 ……

  3. 在Form初始化时,我添加了’this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;’。 然后,它似乎自动将其置于’this.ClientSize = new System.Drawing.Size(11264,730)’方法之上,这引起了我的兴趣。

    通过稍微进一步调试,看起来当应用程序构建和初始化时,’this.ClientSize’属性已经设置为非常低,或多或少,’230×200’。 我不确定这个值来自哪里,但我想知道它是否与初始resize有关,然后再尝试将它再次设置为更大的值…

无论如何,我遇到了另一个建议,可能会仔细检查我的表单的最小宽度和高度属性 ,并注意到它们被设置为0x0,我默认是假设。

因此,我将最小值设置为与表单的大小值相同,并且在后续构建中,它现在似乎保持其大小! 或者至少,它不再是我所能说的。

我不确定设置最小的表单大小是否是这种奇怪行为的可接受的解决方案,但到目前为止,它似乎是在我们所做的每个构建上保持应用程序大小一致,这在目前是一种解脱。

如果任何人对ClientSize属性有进一步的了解,并且如果我对它的初始低尺寸感到担心是正确的,那么听听它会很棒。 🙂

  1. 复制表单大小的值。
  2. 在最小和最大尺寸属性中过去它。
  3. 请享用