Is there a quick way to resize forms and controls?!

Posted on 2010-08-24
Last Modified: 2012-06-21
We have an big software made in WinForm VB 2008 designed with 1280X1024 forms. Previous version of our software worked on 1024X768 screens. Now, we are upgrading those clients with the newer version, but the touch-screen (it's an embedded industrial computer) does not support 1280X1024 resolution (it's something we all missed before giving the go-ahead for the upgrade). So, we have to resize all the forms and controls, and spacing between each controls, to fit the 1280 interface into 1024.

We decided to make a new version and copy/paste all control and code and manually resize the whole things (there are a lot of forms and controls...) which will take very much time. Ideally, we should have a single version that support both resolutions, as maintenance of both versions will quickly become a nightmare.

Anyone have an idea of how we could automatically resize forms and controls, depending of the resolution? Getting the best resolution of the graphic card is not a problem, it's the resizing of forms and controls that give us headache...

thanks for your time and help
Question by:Dominic34
LVL 20

Accepted Solution

alainbryden earned 500 total points
ID: 33510375
I've always made my controls re-sizable to any resolution simply by implementing the form_resize event. Instead of using fixed positions, calculate them in this event. Don't assign Top, Width, Height, etc constant values - use a series of formula to calculate how much space is available, and what their respective positions should be relative to each other.

It will take a little effort this first time, since you're overhauling the UI layout, but after that you'll never have to worry about resolution problems again.

I've attached an example.

Const ListboxPadding = 1
Const ButtonPadding = 3
Const MinHeight = 100
Const MinWidth = 520

Private Sub UserForm_Resize()
    With ButtonSearchBasic
        .Top = Me.InsideHeight - ButtonPadding * 2 - .Height
    End With
    With ButtonSearch1
        .Top = Me.InsideHeight - ButtonPadding * 2 - .Height
    End With
    With ButtonSearch2
        .Top = Me.InsideHeight - ButtonPadding * 2 - .Height
    End With
    With ButtonExit
        .Top = Me.InsideHeight - ButtonPadding - .Height
        .Left = Me.InsideWidth - ButtonPadding - .Width
    End With
    With ButtonFillOverwrite
        .Top = Me.InsideHeight - ButtonPadding - .Height
        .Left = Me.InsideWidth - ButtonPadding * 4 - .Width - ButtonExit.Width
    End With
    With ButtonFillEmpty
        .Top = Me.InsideHeight - ButtonPadding - .Height
        .Left = Me.InsideWidth - ButtonPadding * 6 - .Width - ButtonFillOverwrite.Width - ButtonExit.Width
    End With
    With ResizeGrab
        .Left = Me.InsideWidth - .Width
        .Top = Me.InsideHeight - .Height
    End With
    With ResultList
        .Top = ListboxPadding
        .Left = ListboxPadding
        .Height = Me.InsideHeight - 2 * ButtonPadding - ButtonExit.Height - .Top
        .Width = Me.InsideWidth - .Left - ListboxPadding
    End With
End Sub

Open in new window

LVL 22

Expert Comment

ID: 33510404
There really isnt much that you can do. Thats one of those design flaws that happens in developement. Its always wiser to make the sizes universal and allow the user to size the screen themselves once the executable is launched. this is why we have scrolling bars and form controls set so the user can size the application themselves :(

Take this as a lesson learend and call up the original developers and make them do the transition. Save both copies for future code changes.

Heres some more light readon on the subject

LVL 20

Expert Comment

ID: 33510413
This is just a separate thought - but if you want something real quick, you should give this a shot:

Detect the resolution (available width and height), then try looping over all controls on the form and multiplying their top, left, width and height by a constant ratio equal to the expected resolution over the actual resolution.

I think I did this once, so I'm going to try and track down the code. Hang tight.
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.


Expert Comment

ID: 33510482
This article was helpful for me. Docking controls, and only resizing the panels. Kinda like a flowLayout.

Author Comment

ID: 33510733
alainbryden, really interesting. What is the Me.InsideHeight variable is your example?
LVL 20

Expert Comment

ID: 33512096
Me refers to the form itself, and InsideHeight refers to the area of the form that controls can occupy (i.e. doesn't include the window title and frame dimensions.

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Close form "before" open 3 48
how to wrap a merged cells of datagridview column in vs2010 ( 8 43
get row value in 4 17
Well, all of us have seen the multiple EXCEL.EXE's in task manager that won't die even if you call the .close, .dispose methods. Try this method to kill any excels in memory. You can copy the kill function to create a check function and replace the …
Creating an analog clock UserControl seems fairly straight forward.  It is, after all, essentially just a circle with several lines in it!  Two common approaches for rendering an analog clock typically involve either manually calculating points with…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

789 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question