The form is the most fundamental object used in an
application. By itself, a form does nothing. Its main role is to host other
objects that the user uses to interact with the computer:

Form Creation

There are various ways you can get a form to your
application:

If you create a Windows Forms Application, it creates a starting
form for you

After starting an empty project or a Windows Forms Application, you
can add a form to it. To do this, on the main menu, you can click
Project -> Add New Item... Select Windows Form. Give it a name and click
OK

You can dynamically create a form and add it to your application.

In Lesson 2, we saw that a was based on the Form
class that is defined in the System.Windows.Forms namespace created
in the System.Windows.Forms.dll assembly. Therefore, if you start an
application from scratch and you want to use a form in it, you can include
the System.Windows.Forms.dll library to your application. To refer to
a form, you can include the System.Windows.Forms namespace in your
application.

As seen in Lesson 2, to create a form-based application,
you can derive a class from Form. Here is an example:

Start Microsoft Visual C# and create a new Windows Application named
CPAS1

Press Ctrl + F5 to test the program

Close the form and return to your programming environment

The Name of a Form

Like any other control, a form must have a name. If you
derive a class from Form, the name you use for the class would be the name
of the form. If you add a form from the Add New Item dialog box, you must
also give it a name. If you create a Windows Application from the New
Project dialog box, the wizard would create a default form for you named
Form1. However you create or get a form, you can change its name.

To change the name of a form, in the Solution Explorer,
right-click the name of the form and type a new name with the .cs extension.

Application:
Renaming a Form

In the Solution Explorer, right-click Form1.cs and click Rename

Type Central.cs and press Enter

The Form's Title Bar

The System Icon

A form is made of various sections that allow its
control as a Windows object and other aspects that play a valuable part as a
host of other objects. The top section of a form is made of a long portion
called the title bar.

On the left side of the title bar, the form displays a
small picture called an icon or the system icon. Microsoft Visual Studio
2010 provides a default icon for all forms. If you want to use a different
icon, while the form is selected, in the Properties window, you can click
the Icon field and then click its ellipsis button
.
This would launch the Open dialog box from where you can locate an icon and
open it.

To change the icon programmatically, declare a variable
of type Icon of the System.Drawing namespace and initialize it
with the name of an icon file using the new operator. After
initializing the icon, assign it to the form's Icon property. Here is
an example:

Whether you had assigned an icon to the for or not, you
can control whether the form should display an icon. To support this, the
Form class is equipped with a Boolean property named ShowIcon. If you
set this property to false, the icon would not appear in the title bar of
the form. If the Form.ShowIcon property is set to true, which is its
default value, the form's title bar would display an icon.

Application:
Configuring a Form's Title Bar

On the main menu, click Project -> Add New Item...

In the middle list, click Icon File

Set the Name to cpas click Add

Design the 32x32 icon as follows:

Design the 16x16 icon as follows:

To save the icon, on the Standard toolbar, click the Save All button

Close the window tab that contains the icon designed

Click the body of the form to make sure it is selected. In the
Properties window, click Icon and click its ellipsis button

On the Open dialog box, locate the folder in which you had saved the
project and select the cpas icon

Click Open

Execute the application to test it

Close it and return to your programming environment

The Form's Caption

On the right side of the system icon, there is a word or
a group of words called the caption. By default, the caption displays the
name of the form. If you want to change the caption, while the form is
selected, in the Properties window, click the Text field and type
anything you want. After typing the text, press Enter to display it on the
form.

At design time, the caption is made of text that you
type "as is". At run time, you can change the caption to display a more
complex text that could be a changing time, the result of a calculation,
etc. Here is an example:

While the form is selected, in the Properties window, click Text
and typeCollege Park Auto Shop - Customer Repair Order

Press Enter

The System Buttons

On the right side of the caption, there are three small
buttons called the system buttons, made of the Minimize (,,
or
),
the Maximize (,,
or
),
and the Close (,
,
or
)
buttons. The presence or absence of these buttons is controlled by the
Boolean ControlBox property whose default value is True to indicate
that the form will be equipped with the system buttons. If you set it to
False, no system button would be displayed:

In this case, the user would not be able to close the
form using the system buttons. Therefore, if you create this type of form,
make sure you provide the user with a way to close it.

The Minimize (,,
or
)
button is controlled by a Boolean property called MinimizeBox. By
default, when you freshly create a form, this property is set to True and
the form would display a Minimize button.

The Maximize (,,
or
)
button is controlled by the Boolean MaximizeBox property, which also
is set to True by default. Depending on what you are trying to achieve in
your application, you can change the value of either one or both of these
properties. The four combinations are as follows:

MaximizeBox

MinimizeBox

Display

Result

True

True

The form can be
minimized or maximized

True

False

The form can be
maximized but cannot be minimized

False

True

The form can be
minimized but cannot be maximized

False

False

The form can be
neither minimized nor maximized

To change a system button programmatically, call the
desired button's property and assign it a true or false value.
Here is an example that makes sure the user cannot maximize the form:

To make sure that the user cannot maximize the form, on the
Properties window, click the MaximizeBox field to reveal its
combo box and select False

Test the program

Close the form and return to your programming environment

The Form's Position

The Form's Location

When you create an application and while you are
designing the form, it is fixed in the top-left corner of the Form Designer.
This is not the position the form would have when it runs. In fact, by
default, a random position is set for the form when it comes up.
Fortunately, you can specify where the form would be located when it comes
up and you have various alternatives.

Like every control on an application, a form has a
parent: the desktop. The desktop is the wide area of the monitor easily seen
when the computer comes up. Everything on the computer is located with
regards to this main parent. In the same way, a form uses the desktop to
determine its "physical" location. Based on this, when an application is
launched, its form occupies an area of the desktop. To locate its children,
the desktop uses a Cartesian coordinate system whose origin is located on
the top-left corner of the screen:

The horizontal measurements move from the origin to the
right. The vertical measurements move from the origin to the bottom:

The distance from the the desktop’s left border to the
form’s left border is represented by the form's Left property. The
distance from the desktop’s top border to the form’s top border is
specified by the Top property. Therefore, the Left and the
Top values are known as the form’s location. This can be illustrated
as follows:

To specify the default location of a form when the
application is opened, in the Properties window, click the + button of the
Location field to reveal the values of the location. If a value of a
property is set to 0, the compiler would select a random value for it when
the form comes up. Otherwise, you can change each value to a valid natural
number.

If you want to programmatically set the location of the
form, you can assign a value to its Left and/or its Top
properties. Here is an example:

At design time, the X and Y values of the Location
property allow you to specify a position for the form. At run time, the
Left and Top properties accomplish the same purpose. Microsoft
Windows provides an alternative position to specify the location of the form
relative to its parent. This is the role of the StartPosition
property of the Form class, which is a value of the
FormStartPosition enumerator. It provides the following five values:

Value

Result

CenterParent

The form will be positioned in
the center of its parent. If the application is made of only one
form, this form would be positioned in the middle of the desktop

CenterScreen

The form will be positioned in
the middle of the desktop even if this form is part of an
application that is made of various forms.

Manual

The form will use the values
of the X, Y, Left, and/or Top properties of the
Location

WindowsDefaultLocation

The operating system will
specify the form's position using a value known in Win32 as
CW_USEDEFAULT

Based on this, to set the default relative location of a
form when it comes up, change the value of its StartPosition combo
box in the Properties window. To specify this characteristic when
programmatically creating a form or to change this property at run time,
call the FormStartPosition enumeration to select the desired value
and assign it to the StartPosition property of the form. Here is an
example:

The StartPosition property provides another value
that is related to the size. Therefore, we will mention it when we review
the size of a form.

Application:
Setting a Form's Default Position

Click the middle of the form to make sure it is selected

In the Properties window, click StartPosition to reveal its
combo box. Click the arrow of its combo box and select CenterScreen

Execute the application to view the result. Notice that it is
centered on the screen

Close it and return to your programming environment

The Window State of a Form

When creating your application, you can configure its
(main) form to be minimized or maximized when the application is launched.
This feature is controlled by the WindowState property. The default
value of this property is Normal which means the form would appear in
the same dimensions it was designed. If you want the form to be minimized or
maximized at startup, in the Properties window, change the desired value of
the WindowState property to Maximized or Minimized.

To control the window’s state programmatically, assign the
Maximized or Minimized value, which are members of the
FormWindowState enumerator, to the WindowState property. Here is
an example:

If you want to check the state of a window before taking
action, simply use a conditional statement to compare its WindowState
property with the Normal, the Maximized, or the Minimized
values.

The Form's Taskbar Presence

When an application displays on the screen along with
other applications, its form can be positioned on top of, or behind, forms
of other applications. This is allowed by multitasking assignments. When a
form is hidden, the taskbar allows you to access it because the form would
be represented by a button. This aspect of forms is controlled by the
ShowInTaskbar Boolean property. Its default value is True, which
indicates that the form would be represented on the taskbar by a button.

If you create an application made of various forms, you
may not want to show all of its forms on the taskbar. Usually the first or
main form would be enough. To prevent a button for a form to display on the
taskbar, set its ShowInTaskbar property to False.

Unless you have a good reason, and it is hard
to see what that reason could be, you should not set the
ShowInTaksbar property of the first or main form of an
application to false.

The Form's Measures

The Form's Size

A form's size is the amount of space it is occupying on
the screen. It is expressed as its width and its height. The width of a form
is the distance from its left to its right borders. The height is the
distance from the top to the bottom borders of a form:

When you create a form, it assumes a default size. To
set or change the size of a form, at design time, first click it to select
it. Then, position the mouse on its right, bottom, or bottom-right handles.
This changes the mouse cursor in one of three shapes:

With the mouse positioned, drag in the desired
direction.

If you don't want to be able to resize a form and you
want to prevent this by accident, at design time, set the form's Locked
property to True. If you do this:

A small picture of a lock displays in the top-left corner of the
form:

The form gets surrounded by a rectangle with a black border

The sizing handles of the form disappear

Because Locked is only a design
characteristic, it is not an actual property of the Form class.
Therefore, you cannot use it to lock a form at run time. In order
words, you cannot use the Lock feature to prevent the user from
resizing a form.

Besides resizing the form by dragging one of its
handles, to change the size of a form, select it and, in the Properties
window, click the + button of the Size field. Then type the desired
value for the Width and the desired value for the Height. The
values must be natural numbers.

To programmatically change the size of a form, assign
the desired values to either or both its Width and Height
properties. Here is an example:

If you want the operating system to specify the size of
the form, set its StartPosition property to WindowsDefaultBounds.
In this case, a value called CW_USEDEFAULT would be assigned to both
the Width and the Height properties.

Application:
Setting the Form's Default Size

Position the mouse to the small square on the right border of the
form

Click and drag in the right direction to make sure the caption in
the title bar can appear completely

Release the mouse

The Form Borders

A form can be made to look like a regular rectangular
host made of a system icon and the system buttons. Depending on your goals,
you can also make a form appear as a dialog box or a dockable window. The
borders of a form are controlled by the FormBorderStyle property.

If you set both the MinimizeBox and the
MaximizeBox properties to False, we saw that the form would have
only the system Close button, but the form can still be resized. If you want
the form to display only the system Close button and to prevent the user
from resizing it, set its FormBorderStyle property to FixedDialog.
Here is an example:

A tool window is a form equipped with a short
title bar, no icon, and only a small system Close button. There are
two types of tool windows.

A tool window is referred to as fixed if the user cannot
resize it. In this case, the FormBorderStyle property of
the form is set to FixedToolWindow:

FormBorderStyle = FormBorderStyle.FixedToolWindow;

A tool window is referred to as sizable if it allows the
user to resize it. To get such a form, set its
FormBorderStyle property to SizableToolWindow:

FormBorderStyle = FormBorderStyle.SizableToolWindow;

You can also create a form with no borders by
assigning None to the FormBorderStyle property. If you
do this, make sure you provide the user with a way to close the
form; otherwise...

The Client Area of a Form

Introduction

When a form has been created, you can add Windows
controls to it. These controls can be positioned only in a specific area,
the body of the form. The body spans from the left border of the form,
excluding the border itself, to the right border of the form, excluding the
border. It also spans from the top side, just under the title bar, to the
bottom border, excluding the bottom border, of the form. The area that the
form makes available to the controls added to it is called the client area:

If a control is positioned on a form, its location uses
a coordinate system whose origin is positioned on the top-left section of
the client area (just under the title bar). The x axis moves from the origin
to the left. The y axes moves from the origin down:

The distance from the left border of the client area to
the left border of the control is the Left property. The distance
from the top border of the client area to the top border of the control is
the Top property. These can be illustrated as follows:

To know the amount of space that a form is making
available to its child control, you can access the form's ClientSize
property.

The Background Color of a Form

The client area of a form is painted with a color
specified by the operating system. To change the color to anything you like,
you can use the BackColor field of the Properties window. If you
click the arrow of its combo box, it displays a property sheet with three
tabs that divide the color in categories:

To programmatically change its color, assign a color
from the Color structure to the BackColor property. Here is an
example:

If you look closely, you will notice that only the
client area of the form is painted. The borders, since they are not part of
the client area, are not painted.

The Background Image of a Form

Introduction

If you prefer to cover the client area with a picture,
use the BackgroundImage property instead. To specify the background
picture at design time, in the Properties window, click BackgroundImage and
click its ellipsis button. This would open the Select Resource dialog box.
To locate a picture, click one of the Import buttons, select the picture
from the chosen folder and click Open. The picture would be imported in the
dialog box:

You can then select it and click OK

To programmatically specify or change the picture used
as background, declare and initialize a pointer to the Bitmap class.
Then assign it to the BackgroundImage property. Here is an example:

There are two ways you can use a background image on a
form. You can fill the whole client area with the picture if the picture is
bigger than the client area. If the picture is narrower and/or shorter than
the picture, you can resize or repeat it. To assist you with making this
decision, the Form class is equipped with a property named
BackgroundImageLayout.

The Form.BackgroundImageLayout property is based
on the ImageLayout enumeration. Its values are:

None: The picture will display once, from the top-left origin
of the client area. Here is an example:

Zoom: The compiler will find out which measure is smaller
between the width and the height of the client area of the form. That
smaller measure will be used for both the width and the height of the
picture. Here is an example:

If the form's width is lower than its height, then the picture will
be positioned in the middle of the form:

If the form's height is lower than its width, then the picture will
be positioned in the center of the form:

Methods and Events to Manage a Form

Form Creation

The form is implemented by the Form class from
the System.Windows.Forms namespace. The Form class is equipped
with a constructor that allows you to dynamically create it. After a form
has been created, it must be loaded to display on the screen. When a form is
being loaded, it fires the Load() event which is of type EventArgs.
This event is fired when a form is about to be displayed for the first time.
Therefore, it can be used to perform last minute initializations.

Form Activation

When two or more forms are running on the computer, only
one can receive input from the user. This means that only one form can
actually be directly used at one particular time. Such a window has a title
bar with the color identified in Control Panel as Active Window. The other
window(s), if any, display(s) its/their title bar with a color called
Inactive Window.

To manage this setting, the windows are organized in a
3-dimensional coordinate system and they are incrementally positioned on the
Z coordinate, which defines the (0, 0, 0) origin on the screen (on the
top-left corner of the monitor) with Z coordinate coming from the screen
towards you.

In order to use a form other than the one that is
active, you must activate it. To do this, you can call the Activate()
method. Its syntax is:

public void Activate();

When a form is activated, it fires the Activated
event, which is an EventArgs type of event.

Form Deactivation

If there is more than one form or application on the
screen, only one can be in front of the others and be able to receive input
from the others. If a form is not active and you want to bring it to the
top, you must activate it, which fires the Activated() event. When a
form is being activated, the one that was on top would become deactivated.
The form that was on top, as it looses focus, would fire the Deactivate()
event which is an EventArgs type.

Form Closure

When the user has finished using a form, he or she must
be able to close it. Closing a form is made possible by a simple call to the
Close() method. Its syntax is:

public void Close();

When this method is called, the process of closing a
form starts. At this time, the Closing() event is fired. The
Closing() event is implemented by the CancelEventArgs class
through the CancelEventHandler delegate. The CancelEventArgs
class is equipped with only the Cancel property. The
CancelEventArgs.Cancel property allows you to cancel or to continue with
the closing of the form. If you set the CancelEventArgs.Cancel
property to true, the event will be ignored as if it were not fired.
If you want the event to continue closing the form, you can set this
property to false. This event occurs before the form is actually
closed, giving you time to let the form be closed, prevent the form from
being closed, or take any other necessary action.

After a form has been closed, a Closed() event is
fired. Although this method can be used to close any form of an application,
if it is called by the main form, it also closes the application.