My Windows Form keeps on shrinking/resizing on build
Asked Answered
S

13

17

I am working on a Windows Forms project. It contains a tab controller with multiple pages and multiple controls on each.

It appears that relatively recently, after some form changes, that each time I build and run the solution the form resizes/shrinks.

So if I set the size of the form height to 768, once I click 'Start' to build and run it, I can actually catch a glimpse of it resizing itself during the process and then the form loads 21 pixels shorter than the height value it was at build for.

If I then keep building and running my project, the form will decrease by 21 pixels each time, making it smaller and smaller with every build.

We think it might have been introduced when we added the 'DataGridView' controller to one of the tabs, but we have yet to prove if that's the case.

Is there a reason why this would be happening, and what could be doing this? Why would it resize itself during build run time?

Scandium answered 24/12, 2014 at 7:52 Comment(2)
Is it reproducable behaviour? Can you create new project, make some actions and get same result? If not - I really doubt some here can help you with this issue.Zlatoust
Thanks for the reply. Will try see if I can reproduce the bahaviour on a clean project, but since this project is quite complex Im worried it might take some trial and error to find the exact action that originally caused this behaviour. I am more hoping if anybody else here has experienced similar behaviour or is aware of any known quirks that produces things like this. Maybe even better yet, how to possibly avoid the form to resize at all by itself at build.Scandium
D
12

This is an annoying bug, and I have suffered similar behavior myself. However, there maybe a couple of workarounds, however be warned though, these may or may not help and sound a little hacky.

Solution 1

If your control isn't docked, docking may help.

Solution 2

You might be able to change your DPI settings to eliminate the problem, i.e.:

Display PropertiesSettings tab → Advanced. In the the Advanced dialog I changed the "DPI Settings" from Large (120 dpi) to Normal (96 dpi).

Solution 3

This is maybe due to AutoScaleMode-property. Your forms may have been designed with a different DPI or font settings than you have now in Windows display settings. Try setting the AutoScaleMode-property to None in your form and offending controls, and they won't be automatically re-sized anymore.

Disario answered 24/12, 2014 at 8:2 Comment(3)
thank you! Glad to hear it's been experienced before. Will try investigate a couple of your solutions and see if any of them help. Thanks!Scandium
None of these Solutions worked at all and had any effect on my issue (that is like the question asked). This is related to a bug in VS2015 as described in my answer https://mcmap.net/q/695247/-my-windows-form-keeps-on-shrinking-resizing-on-build.Lais
This was asked in 2014, however it probably is still a bugDisario
L
5

The Problem

Apparently there is a bug in Visual Studio 2015. It is not calculating the Size properly when certain circumstances are met. In my case I was using the following...

(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

Now... If you close this form and open it back up the Size is still exactly the same (600, 170). If you change the following property...

ControlBox:       False

Then you closes the form and open it back up you will notice the Size has now been changed to (610, 203).

My guess is that the bug is not accounting for two things. One would be the form title bar HEIGHT. The other would be the title bar icon WIDTH. This would be the offset of a WIDTH of 10 pixels and a HEIGHT of 33 pixels.

The Solution

Well you actually have three workarounds. One would be to offset the MinimumSize. Another would be to actually show the ControlBox. The last one would be to fix the issue in code by setting the ControlBox property after the form is initialized.

Offsetting The MinimumSize:

So the first option would be to offset what you want the MinimumSize to be by (w:10, h:33). So for example, If you want the MinimumSize to be (600, 170) then you need to set it to (590, 137). That would actually produce the size you expect to see.

Showing the ControlBox:

Simply change the following property...

ControlBox:       True

Correcting the issue with code:

You will need to change the following property at design-time...

ControlBox:       True

Then you will need to set the ControlBox property to False after the form is initialized.

public Form1()
{
    InitializeComponent();
    this.ControlBox = false;
}
Lais answered 23/2, 2017 at 17:2 Comment(2)
Thumbs Up! Can't believe I simply had to enter the Form Size at "Minimum Size" Property. Been remaking code hundreds of ways for months... Thanks Arvo BowenPlourde
Hi, can you please look into my issue here: #76464774Combatant
R
4

This Works for me, on form designer.

enter image description here

Runlet answered 24/8, 2021 at 19:4 Comment(0)
L
3
  1. Copy the values of your form size.
  2. Past it in both Minimum and Maximum Size property.
  3. Enjoy
Loraineloralee answered 25/5, 2018 at 12:2 Comment(2)
thank-you, I enjoyed this when it stopped my buttons from resizing at runtime.Sabir
This worked for me.Brann
T
3

Upgrading to .NET framework 4.7+ will resolve the issue of text being cropped. Furthermore if that isn't applicable add the following line to the app.config file

<System.Windows.Forms.ApplicationConfigurationSection>
    <add key="DpiAwareness" value="PerMonitorV2" />
    <add key="EnableWindowsFormsHighDpiAutoResizing" value="false" />
</System.Windows.Forms.ApplicationConfigurationSection>

This will disable the scaling performed by windows thus the application size won't change. For more details visit Auto Scaling in Windows Forms

Tallyman answered 11/2, 2021 at 18:13 Comment(1)
this is the real one for me in Oct 2023, though for using form not building – VS 17.4.1 , Win 11 10.0.22621 , .NET 4.8Bookkeeping
B
2

I had the same problem. My solution:

My PC's system is Windows 10. The resolution of the monitor was 125%, and I set it to 100%. Then I set the size of the form, not changed.

You can see the resolution settings in this picture:

Resolution settings

In Turkish "Scale" is "Ölçekle". There are resolution options on the bottom ("ölçekle ve düzenle").

Biota answered 10/7, 2017 at 16:55 Comment(1)
I had this same issue when using VMWare Fusion with a Windows 10 guest. Problem lied with using full retina resolution and having a scaled layout.Chowchow
E
2

Faced the same problem. Fixed it by changing 'AutoSizeMode' to 'GrowOnly'

Enamelware answered 13/5, 2022 at 9:10 Comment(0)
S
1

OK, so first in response to Saruman's suggested solutions..

  1. None of the controllers in the application where had docked values. A good few were anchored, but none appeared docked. I docked a couple of the main containers I could find, and it didn't seem to make much difference. Admittedly I didn't dock every single controller, but I then moved onto solution 2...

  2. I wasn't sure where to find the DPI settings. Whether somewhere in Visual Studio, or on my machine. So I moved onto proposed solution 3...

  3. On the Form initialize, I added 'this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None;'. This then seemed to automatically place it above a 'this.ClientSize = new System.Drawing.Size(11264,730)' method, which piqued my interest.

    With a little further debugging, it appears that when the application builds and intializes, the 'this.ClientSize' property is already set at a very low, more or less, '230x200'. I am not sure where this value comes from, but I wonder if it has anything to do with the initial resizing before it then tries to set it again to something bigger...

Regardless, I came across another suggestion to possibly double check my form's minimum width and height properties, and noticed they were set to 0x0, I'm assuming by default.

So I set the minimum values to be the same as my form's size value, and on subsequent builds it appears to be keeping its size now! Or at least, it isn't shrinking any more from what I can tell.

I'm not sure if setting the minimum form size is an acceptable solution for this bizarre behaviour, but so far it seems to be keeping the application size consistent on each build we do, which is a relief at the moment.

If any one has further knowledge on the ClientSize property and if I am right to be concerned about its initial low size, would be great to hear it. :)

Scandium answered 24/12, 2014 at 9:50 Comment(1)
You're getting warmer... My answer https://mcmap.net/q/695247/-my-windows-form-keeps-on-shrinking-resizing-on-build might shed some light on the actual issue. Thanks for the question! ;)Lais
M
1

I figured it out!

If you click on the form in "Design View""Properties""MinimizeBox" and change "True" to "False".

Mercurialize answered 15/12, 2016 at 17:29 Comment(2)
This seemed to fix my VS2012 occurrence of the original poster described problem, but only because I didn't try anything else. Toggling the Minimize back to true did not cause the form to resize again.Lapin
I also stopped having this issue in VS 2017Mercurialize
S
0

If you are experiencing this issue in Visual Studio 2019, a simple fix is to set the AutoSize property of your form to True, and then to place a small, invisible control, such as a Panel, in your form at the extreme lower-right of the form. Size the panel to something like 20,20.

When the form automatically resizes upon running, Windows will calculate the form size to include all of your form's controls, which will include the small Panel you've placed in the lower-right.

I think that this is the simplest, easiest approach to have your forms sized appropriately without fighting Windows automatic scaling.

Saunderson answered 27/6, 2021 at 18:9 Comment(0)
A
0

And we have a late contribution (if someone, like me, ends up here with a problem similar to mine) :)

My problem proved to be a shortcoming in VS. Having a "high dots per inch" (HDPI) monitor as my main screen was what caused my problem. Having different zooms on different monitors messes things up for VS. Running the executable on other machines (sometimes) shrunk the form so that (roughly) the bottom quarter wasn't visible.

Read about it here: https://learn.microsoft.com/en-us/visualstudio/designers/disable-dpi-awareness?view=vs-2019

But in short - here are the three suggested solutions:

  • Restart Visual Studio as a DPI-unaware process

  • Add a registry entry

    set HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers to the path to the devenv.exe (for VS 2019 normally C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\devenv.exe)

  • Set your display scaling setting to 100%

The first is the suggested solution in the article, but that messed up other things in the Form editor for me, so I ended up turning down the resolution and setting the zoom to 100% for all monitors.

Ahab answered 20/10, 2021 at 13:31 Comment(1)
I see now that this basically was what Abdulkadir Avcı suggested, but i didn't grasp that when I read it. :P And none of the other suggestions helped me.Ahab
N
0

I have just come across this problem setting up a form in Visual Basic in VS2008. I found the solution was to leave the form’s minimum size property at 0, 0 at design time and set it with code in the formload sub.

Newspaperman answered 13/6, 2022 at 20:23 Comment(0)
A
0

Not sure if this is the same problem, but my Form2 would appear shrunken when opened by clicking a button on Form1. My Form2 has AutoScaleMode=Font. Solution: Restart Visual Studio, and if it says something like "VS is running at 200%. Do you wish to restart at 100% scale?" then do it. Restart Visual Studio at 100%, go into your designer for Form2, and you'll see that some of the buttons and overall size of the Form are not what you want. Fix in the designer, recompile, and run.

Antibody answered 8/1 at 18:53 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.