September 23, 2019
Hot Topics:

Changing Layout Dynamically in Windows Forms

  • April 16, 2007
  • By Bipin Joshi
  • Send Email »
  • More Articles »


If you are a long-time Windows developer, at some point in time you must have faced the difficulty in adjusting your forms and dialogs for multiple screen resolutions. In the past, developers used various techniques to avoid such problems, including resizing controls at runtime by handling certain event handlers. However, the task was certainly not an easy one. Fortunately, the .NET Framework 2.0 provides some handy techniques that allow you to provide dynamic layout to your forms. In this article, I am going to illustrate some of these techniques with examples.

Why Dynamic Layout?

There are many scenarios wherein you need dynamic layouts. Some of the common ones are as follows:

  • You developed your application under one screen resolution and want to run it on machines having different (and possibly unknown) screen resolutions.
  • You are setting the text of controls such as Label and Button via code and don't know the length of the text at design time.
  • You are developing a multilingual application and don't know the width of controls under different language settings.
  • Your application adds controls dynamically on the forms.

In all such cases, being able to change the layout of your form dynamically becomes essential.

The Solution

Luckily, the .NET Framework 2.0 comes with several options to solve the problem of dynamic layout. In this article, I am going to cover the following options:

  • Auto sizing forms and controls
  • Docking
  • Anchoring
  • Flow layout panel
  • Table layout panel

Auto sizing forms and controls

In this example, you will learn to resize Windows Forms controls and forms automatically so that they fit their content. Before going any further, let me illustrate why such auto sizing is necessary.

Create a new Windows Application using Visual Studio and C# as the programming language. Design the default form as shown below:

The form consists of a textbox and three buttons. Clicking on the "Change Text" button changes Text property of the remaining two buttons to a value entered in the textbox. Write the following code in the Click event handler of "Change Text" button.

private void button3_Click(object sender, EventArgs e)
   button1.Text = textBox1.Text;
   button2.Text = textBox1.Text;

The code simply sets the Text property of button1 and button2 to a string entered in textBox1. After writing the code, run the form. Enter some big string value in the textbox and click the "Change Text" button. The following figure shows a sample run of the form.

Can you see the problem? The button controls do not display the complete text. Now, set the AutoSize property of both buttons to true. The AutoSize property governs whether a control should automatically adjust its width to accommodate its contents. Also, set the AutoSizeMode property of the first button to GrowOnly and that of the second button to GrowAndShrink. The AutoSizeMode property governs how a control should behave to adjust its contents. The value of GrowOnly indicates that the control can only expand to accommodate its content. The value of GrowAndShrink indicates that the control can expand or shrink to fit its content. Run the form again. This time, you will observe that the buttons adjust their width as per the text entered. Notice the behavior of the second button. It expands as well as shrinks according to the length of the text value.

Now, enter a very long string and check the behavior. You will find that the buttons adjust themselves as per the text but the form remains the same. As a result, buttons expand beyond the form boundaries.

This can be easily corrected by setting Form's AutoSize property to true.

Page 1 of 3

Enterprise Development Update

Don't miss an article. Subscribe to our newsletter below.

Thanks for your registration, follow us on our social networks to keep up-to-date