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

Posted on 2010-08-24
Medium Priority
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
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 20

Accepted Solution

alainbryden earned 2000 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.
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.


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

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

Question has a verified solution.

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

This tutorial demonstrates one way to create an application that runs without any Forms but still has a GUI presence via an Icon in the System Tray. The magic lies in Inheriting from the ApplicationContext Class and passing that to Application.Ru…
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 …
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

719 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