Resizing Forms and Controls

ne of the more common questions here at Ask the VB Pro has always been how to automatically handle the resizing of forms and controls. Unfortunately, the short answer is that there isn’t a fully automatic way to resize the controls that are built into Visual Basic. However, this 10-Minute Solution will give you some tips on how to handle this with just a little bit of code.

For starters, it’s not always necessary to provide the ability to resize a form. For example let’s examine a form like the one shown in Figure 1, an Options dialog from Microsoft Word.

This particular dialog can’t be resized. The primary reason is that there is no reason to allow resizing. The picture shows a dialog with more than 20 controls, none of which are text boxes that allow for multiple lines of text. The user just needs to mark the checkboxes and get on with his or her typing. A good rule of thumb to follow is that if your dialog doesn’t have any freeform entry fields or large lists, there’s normally not a reason to resize it.

If you do want to resize a form, you have to handle a few things. Have a look at, for instance, the form shown in Figure 2.

This particular form has three controls: the large text area, and a pair of buttons. If you want to resize this form, you have to move and/or resize all the controls, not just the text area. Here’s the steps I followed which allow this form to be resized:

1. Put the text box in the upper left-hand corner of the form with a small (60 twip) margin on the left and top of it.
2. Draw a PictureBox on the form. Set the Align property to Align Bottom, set the Appearance to Flat, and set the BackColor to the Menu Bar color. This provides a place for your Command buttons.
3. Draw your OK and Cancel buttons in the PictureBox and center them (roughly) in the PictureBox. I put a small margin between the buttons.

Figure 1.

The reason we use a PictureBox is that the PictureBox will automatically move itself to the bottom of the form. Since it does this automatically, we don’t have to adjust the Top properties of the Command buttons?we just have to move them left and right, as necessary.

With the controls drawn, we just have to add the necessary code to make this thing work. All the resizing code goes in the Form_Resize event. Add:

Private Sub Form_Resize()   On Error Resume Next   Dim lngSpacing As Long   Dim lngBtnWidth As Long      lngSpacing = cmdCancel.Left - cmdOK.Left - cmdOK.Width   lngBtnWidth = lngSpacing + cmdCancel.Width + cmdOK.Width      txtComments.Height = picButtonPanel.Top - (2 * txtComments.Top)   txtComments.Width = Me.ScaleWidth - (2 * txtComments.Left)      cmdOK.Left = (picButtonPanel.Width - lngBtnWidth) / 2   cmdCancel.Left = cmdOK.Left + cmdOK.Width + lngSpacingEnd Sub

We first figure out the spacing between the OK and Cancel buttons, since we’ll need this later. Remember that you can’t just subtract the Left properties?you have to account for the width of the OK button. We then figure out how much space the buttons (including the space between them) take up in the PictureBox.

Figure 2.

We then turn our attention to the text area at the top of the page. The text box should fill up the rest of the space on the page, minus the space taken by the PictureBox at the bottom of the page. The text box should maintain a small margin around itself. The calculation subtracts twice the value of the Top property from the available space, which will give us the margin we need. We do the same thing for the width, but we use the Form’s ScaleWidth property, which gives the available space within the form. The Width property gives the total size of the form, including any borders, so we don’t want to use that one.

Once the text box is resized, we have to move the command buttons. They will automatically be moved vertically because they are within the PictureBox. However, we first need to move the OK button to the left. Subtracting the total space required for both buttons from the total width of the PictureBox gives us the available space. Dividing that by two gets us the space available on the left. The Cancel button is moved to the right of the button.

You should notice that On Error Resume Next is set at the top of this subroutine. This takes care of any negative values that might have been stored in the Height or Width properties. If the user minimizes your window or resizes it so the controls can’t be seen, the On Error Resume Next simply sends the program to the next line.

It’s a little bit of work to do this, but useful on forms where resizing makes for a better user experience. There are commercial resizing controls available that can do some of this work for you, but once you get the hang of it, it’s not difficult to write the code required to resize your forms. Plus, you can download examples here.

Share the Post:
Share on facebook
Share on twitter
Share on linkedin


The Latest

homes in the real estate industry

Exploring the Latest Tech Trends Impacting the Real Estate Industry

The real estate industry is changing thanks to the newest technological advancements. These new developments — from blockchain and AI to virtual reality and 3D printing — are poised to change how we buy and sell homes. Real estate brokers, buyers, sellers, wholesale real estate professionals, fix and flippers, and beyond may

man on floor with data

DevX Quick Guide to Data Ingestion

One of the biggest trends of the 21st century is the massive surge in internet usage. With major innovations such as smart technology, social media, and online shopping sites, the internet has become an essential part of everyday life for a large portion of the population. Due to this internet

payment via phone

7 Ways Technology Has Changed Traditional Payments

In today’s digital world, technology has changed how we make payments. From contactless cards to mobile wallets, it’s now easier to pay for goods and services without carrying cash or using a checkbook. This article will look at seven of the most significant ways technology has transformed traditional payment methods.