I have this GUI for my Winform application with 2 FlowLayoutPanels Docked top and right respectively.
Right now I can only give them a fixed size which cannot be changed by user at run time but I want to make these panel Resizable while the application is running.
I've tried BorderStyle Property but only available options are Fixed3D and FixedSingle which are obviously cannot be resized due to their Fixed! behaviour.
I've already gone through the documentation at MSDN but couldn't find anything.
I want to know if I can make them resizable programmatically?
I have a WinForms application (developed in Win 7 64x) with a CheckBox control. I have set the AutoScaleMode property of my form to "None". The form looks fine on my machine.
However, when I send the program to my colleague who is running Windows 8, the CheckBox text appears incomplete. I'm not sure what property of this control is causing this.
I'm not sure what property of this control is causing this.
Well obviously it is the AutoScaleMode property. Or, I suppose more accurately, it is the Size property.
Your colleague's machine has not only different sized controls, but also different sized text. You can see this clearly by comparing the screenshots. The checkbox control's allowed size is too small (not wide enough) to display the entire label, so it gets truncated and all you see are the first two letters of the label.
The solution is rather simple: make the control's area bigger. A better idea would be to let this resizing happen automatically by setting the AutoScaleMode property of your container form to something more sensible, like Text or DPI. This ensures it will not break when the user has a different DPI or font setting than you do on your machine.
Long-term, it is better to design your forms with a fluid layout using TableLayoutPanel or FlowLayoutPanel in conjunction with the Anchor and Dock properties. It is more work than drag-and-drop in the designer, but it produces much better results that scale in all environments.
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?
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 Properties → Settings 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.
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;
}
This Works for me,
on form designer.
Copy the values of your form size.
Past it in both Minimum and Maximum Size property.
Enjoy
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:
In Turkish "Scale" is "Ölçekle". There are resolution options on the bottom ("ölçekle ve düzenle").
I figured it out!
If you click on the form in "Design View" → "Properties" → "MinimizeBox"
and change "True" to "False".
OK, so first in response to Saruman's suggested solutions..
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...
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...
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. :)
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
Faced the same problem. Fixed it by changing 'AutoSizeMode' to 'GrowOnly'
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.
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.
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.
This question already has answers here:
.Net controls changing size between computers
(3 answers)
Closed 9 years ago.
First time i'm developing a Windows Form Application with C# . I'm using Visual Studio 2012.
My form's size = 1096x508. Also i set Minimum Size and Maximum Size properties to 1096x508 .
This is screenshot of my app ,
But when i execute this app on another computer, result like this :
As you see, red line (at bottom of app) invisible. Because applciation's height is 508 px (as expected) on my pc but 416px on other computer. Because of this , red line staying out of Form. So we couldn't see it.
In shortly, my Form's size 1096x508px but it's only 823x416px on another computer. Can you tell me why there are difference? And how can i fix this? There are resolution difference between this screens.
The behaviour of your application on those computers may be caused by different dpi (dot-per-inch) settings of the Windows operating system. In order to check that please compare the actuals values in Windows display settings (100%, 125%, ...).
If you want to have your program independent from dpi settings you may try to work with different panels (control containers). Your status bar could have a fixed with, while the game area is a docked panel (filling the remaining space).
In general, staying independent from actual dpi, is a difficult topic. Most of the time you can work with autosizing controls, but you could run out of space if, say, two labels overlay.
The main issue, as you have already discovered, is that computers with a different DPI setting will cause the controls to scale.
What Hans was suggesting in his linked answer is that you need to re-design your form so when it gets re-size messages it will handle them accordingly.
The main way this is normally handled is setting the Anchor property or the Dock property of a control. By default a control will anchor to the top left corner of it's parent container. When it is told to scale it scales down and to the right. By changing the anchor point to be the bottom only it will make your bottom control move up instead of moving down off of the boundaries of the parent.
I have an application I have been working on for a while in VS2008 developing in Windows XP and it has some panels placed in specific spots so the borders line up and look nice and pretty. Now that I have switched to developing in 7, as far as I can tell everything else is in the same place but it moves both panels over a little bit and one up and one down and messes up my nice borders. Since it still works correctly in XP I'm assuming this is a 7 problem or a VS problem with 7. Anyone have an idea whats going on or if its fixable?
So I figured it out. Turns out the client area wasn't narrower, however the titlebar which is part of the dialog box border was two different sizes in XP and 7. Since the panels were in an mdi child, where the border was not shown because it was underneath the parent, the size of the titlebar part of the border was making a difference in the location my panels were shown relative to the parent. To solve this I set FormBorderStyle to none on the child and re-positioned the panels to be in the correct spot without that titlebar. It now looks the same in XP and 7 since that variable bar size is gone.
Windows in Windows 7 have wider borders.
Your form probably has a fixed size that is based on a Windows XP border width.
Therefore, in Windows 7, the form's client area will be narrower.
If this is in fact the problem, you can solve it by setting the form's ClientSize property in the constructor the the value it currently has in XP.
If this is not the problem, please post more details.
Do you need to have your panels pixel-positioned? .NET 2.0 introduced the FlowLayoutPanel and TableLayoutPanel for resizeable positioning of elements.
The TableLayoutPanel is the more useful of the two. You create rows and columns, which can autosize or size proportionally to each other. You dock the TableLayoutPanel in your form or anchor it to all four sides. Then the user can resize your form and everything resizes with it.
Even if your panels are of a specific size, you can anchor them to a side or a corner so that they stick to the side even if the user resizes the form.