Part#2 Building MDI WinForms Application using C#
Understanding Windows Forms
Windows Forms, also known as WinForms, is one of the longest lived and oldest techniques for building Desktop applications. Windows Forms work as containers to host controls that allow you to present an application. Even though WPF has been available since 2007, WinForms are still used heavily in Enterprise application development and remains a strong competitor for WPF. If your application doesn't need heavy graphics, multimedia and/or a rich eye candy UI then Windows Forms is the best technology to build a Desktop client application.
User Interface Design Principles
The best mechanism for interacting with any application is often a user interface. Therefore, it becomes important to have an efficient design that is easy to use. When designing the user interface, your primary consideration should be the people who will use the application. They are your target audience, and knowing your target audience makes it easier for you to design a user interface that helps users learn and use your application. A poorly designed user interface, on the other hand, can lead to frustration and inefficiency if it causes the target audience to avoid or even discard your application.
Forms are the primary element of a Microsoft Windows application. As such, they provide the foundation for each level of user interaction. Various controls, menus, and so on, can be added to forms to supply specific functionality. In addition to being functional, your user interface should be attractive and inviting to the user.
Best Practices for User Interface Design
The user interface provides a mechanism for users to interact with your application. Therefore, an efficient design that is easy to use is of paramount importance. The following are some guidelines for designing user-friendly, elegant, and simple user interfaces.
Simplicity
Simplicity is an important aspect of a user interface. A visually "busy" or overly complex user interface makes it harder and more time-consuming to learn the application. A user interface should allow a user to quickly complete all interactions required by the program, but it should expose only the functionality needed at each stage of the application. When designing your user interface, you should keep program flow and execution in mind so that users of your application will find it easy to use. Controls that display related data should be grouped together on the form. ListBox, ComboBox, and CheckBox controls can be used to display data and allow users to choose from preset options.
The use of a tab order (the order by which users can cycle through controls on a form by pressing the Tab key) allows users to rapidly navigate fields.
Trying to reproduce a real-world object is a common mistake when designing user interfaces. For instance, if you want to create a form that takes the place of a paper form, it is natural to attempt to reproduce the paper form in the application. This approach might be appropriate for some applications, but for others, it might limit the application and provide no real user benefit, because reproducing a paper form can limit the functionality of your application. When designing an application, think about your unique situation and try to use the computer's capabilities to enhance the user experience for your target audience.
Default values are another way to simplify your user interface. For example, if you expect 90 percent of the users of an application to select Washington in a State field, make Washington the default choice for that field.
Information from your target audience is paramount when designing a user interface. The best information to use when designing a user interface is input from the target audience. Tailor your interface to make frequent tasks easy to perform.
Position of Controls
The location of controls on your user interface should reflect their relative importance and frequency of use. For example, if you have a form for both the input of required information and of optional information then the controls for the required information are more important and should receive greater prominence. In Western cultures, user interfaces are typically designed to be read from left to right and from top to bottom. The most important or frequently used controls are most easily accessed at the top of a form. Controls that will be used after a user completes an action on a form, such as a Submit button, should follow the logical flow of information and be placed at the bottom of the form.
It is also necessary to consider the relatedness of information. Related information should be displayed in controls that are grouped together. For example, if you have a form that displays information about a customer, a purchase order, or an employee then you can group each set of controls on a Tab control that allows a user to easily move back and forth between displays.
Aesthetics is also an important consideration in the placement of controls. You should try to avoid forms that display more information than can be understood at a glance. Whenever possible, controls should be adequately spaced to create visual appeal and ease of accessibility.
Consistency
Your user interface should exhibit a consistent design across each form in your application. An inconsistent design can make your application seem disorganized or chaotic, hindering adoption by your target audience. Don't ask users to adapt to new visual elements as they navigate from form to form.
Consistency is created through the use of colors, fonts, size, and types of controls employed throughout the application. Before any actual application development takes place, you should decide on a visual scheme that will remain consistent throughout the application.
Aesthetics
Whenever possible, a user interface should be inviting and pleasant. Although clarity and simplicity should not be sacrificed for the sake of attractiveness, you should endeavor to create an application that will not dissuade users from using it.
Color
Judicious use of color helps make your user interface attractive to the target audience and inviting to use. It is easy to overuse color, however. Loud, vibrant colors might appeal to some users, but others might have a negative reaction. When designing a background color scheme for your application, the safest course is to use muted colors with broad appeal.
Always research any special meanings associated with color that might affect user response to your application. If you are designing an application for a company, you might consider using the company's corporate color scheme in your application. When designing for international audiences, be aware that certain colors might have cultural significance. Maintain consistency, and do not overdo the color.
Always think about how color might affect usability. For example, gray text on a white background can be difficult to read and thus impairs usability. Also, be aware of usability issues related to color blindness. Some people, for example, are unable to distinguish between red and green. Therefore, red text on a green background is invisible to such users. Do not rely on color alone to convey information. Contrast can also attract attention to important elements of your application.
Fonts
Usability should determine the fonts you choose for your application. For usability, avoid fonts that are difficult to read or highly embellished. Stick to simple, easy-to-read fonts such as Palatino or Times New Roman. Also, as with other design elements, fonts should be applied consistently throughout the application. Use cursive or decorative fonts only for visual effects, such as on a title page if appropriate, and never to convey important information.
Images and Icons
Pictures and icons add visual interest to your application, but careful design is essential to their use. Images that appear "busy" or that distract the user will hinder use of your application. Icons can convey information, but again, careful consideration of end-user response is required before deciding on their use. For example, you might consider using a red octagon similar to a U.S. stop sign to indicate that users might not want to proceed beyond that point in the application. Whenever possible, icons should be kept to simple shapes that are easily rendered in a 16-by-16-pixel square.
Working with Windows Forms
To work with Windows Forms, you need to create a Windows Forms Application project using Visual Studio 2010. To do so, click "Start" -> "All Programs" -> "Visual Studio 2010" and from the list shown choose Microsoft Visual Studio 2010. This will open the Visual Studio Start Page. Click "File" -> "New" -> "Project...". Now you will see the New Project dialog box from which you can choose the Windows Forms Application template, as shown in Figure 1-1.
Figure 1-1. Choosing the Windows Forms Application project template
By default, the project is named "WindowsFormsApplication1" (the next would be "WindowsFormsApplication2", and so on). You can enter another name for your project in the Name text box when you choose the project template, or you can rename your project later.
Once you have chosen the Windows Forms Application template and desired name and location, click "OK". This will open the Visual Studio Integrated Development Environment (IDE), called such because it has all the development-related tools, windows, dialog boxes, options, and so forth, embedded (or integrated) inside one common window, that makes the development process easier.
In the IDE, you will see that a Windows Forms form named "Form1.cs" has been added to the project, and on the right side you can also see the Solution Explorer window. You also need to understand one more window called the Properties window. If the Properties window is not available below the Solution Explorer window, you can open it by clicking "View" -> "Properties Window" or pressing F4. Now the development environment will look like Figure 1-2.
Figure 1-2. IDE with Solution Explorer and the Properties window
Because this is a Windows Forms Application project, you will be working with controls or tools that allow you to provide functionality in the form of a GUI. You can pick the controls from the Toolbox, shown on the left side of the Windows Forms form in the development environment. If you hover your mouse pointer on the Toolbox tab then the Toolbox window will open; expand the All Windows Forms tool set, as shown in Figure 1-3. You can pick controls from there and drop them onto the surface of the Windows Forms form.
Figure 1-3. IDE with the Toolbox
Understanding the Design and Code Views
You mainly deal with two views in the Visual Studio IDE, the Design View and the Code View. When you open the Visual Studio IDE, by default it displays the Design View, as shown in Figure 1-3. The Design View allows you to drag controls and drop them onto the form. You can use the Properties window to set the properties of objects and forms or other files shown in the Solution Explorer. The Solution Explorer also allows you to rename the project, forms, or even other files included in the project. You can rename these objects by selecting them, right-clicking, and selecting "Rename" from the context menu.
Basically, the Design View gives you a visual way to work with the controls, objects, project files, and so forth. You'll want to use the other view available in the Visual Studio IDE, the Code View, when you are working with code to implement the functionality behind the visual controls sitting on the surface of your Windows Forms forms.
To switch from the Design View to the Code View, click "View" -> "Code" or right-click the Windows Forms form in the Design View and select "View Code". Either method will open the Code View for you, as shown in Figure 1-4.
Figure 1-4. The Code View
The Code View displays all the code functionality. In Figure 1-4, note the Form1.cs tab (in which you see the Code View) is beside the Form1.cs (Design) tab, that is actually the Design mode of the Windows form Form1; these tabs allow you to switch among all the GUI elements of the Design View and the related code in the Code View that helps you to provide the functionality. Interestingly, if you tried accessing the Toolbox while in the Code View, you will see that there are no controls in the Toolbox. But when you switch back to the Design View, you'll find the Toolbox is fully loaded with the controls.
To switch back to the Design View, right-click the form in the Code View and select View Designer; you will see that now you are back to the Design View and can continue working with the visual elements, or controls.
You can also use Solution Explorer to switch among the Design and Code Views by selecting your desired Windows Forms form (in case you have multiple Windows Forms forms open), right-clicking, and choosing either View Code or View Designer. This will open either the Code or Design View of the selected Windows Forms form.
Sorting Properties in the Properties Window
Each object such as a form control has many properties you may need to set while working with an application. To help you navigate the many properties listed in the Properties window, you can sort them either categorically or alphabetically. Let's look at each of these sorting options.
Categorized View
The Categorized View organizes properties in the form of sets of properties, and each set has a name to describe that collection of properties; for example, there are categories named Appearance, Behavior, Data, Design, Focus, and so on. You can switch to the Categorized View by clicking the icon on the very left of the toolbar shown at the top of the Properties window.
In Figure-1-5, which shows the Categorized View, under the Appearance category, you will see all properties listed that define the look and feel of the object (in this case, a form). Note that the other categories are also shown in Figure 1-5.
Note: I have intentionally kept the other categories in the collapsed mode in Figure 1-5, just to show you all the categories. When you switch to the Categorized View, you will see that all the categories are expanded by default.
Figure 1-5. Categorized View of properties
Alphabetical View
The Alphabetical View organizes properties in ascending order by name from a to z. You can switch to the Alphabetical View by clicking the icon second from the left on the toolbar shown in the top of the Properties window.
Figure 1-6 shows this view; all the properties listed are organized alphabetically. Working with the Alphabetical View, rather than the Categorized View, makes life much easier. For example, say you are seeking the Font property. In the Categorized View, you need to understand under which category this property is located to find it. However, if you have properties organized in the Alphabetical View, you can easily locate this property because it begins with the letter F, so you know whether you need to go back or forward to find this property for your control.
Figure 1-6. Alphabetical View of properties
Setting the Properties of Solutions, Projects, and Windows Forms forms
Before you begin putting controls onto the Windows Forms form, you need to learn how to modify some property values of the solution, project, and form you created earlier (shown previously in Figure 1-2).
Select the "WindowsFormsApplication1" solution, go to the Properties window, and set its Name property value to "WindowsFormApp".
Note: In some cases you may not be able to see the solution (.sln) file in Visual Studio. To have a solution file listed, such as "Solution <ProjectName>(1project)", as shown in Figure 1-7, you need to click "Tools" -> "Options", go to the Project and Solutions tab, choose General, check the "Always show solution" option, and click "OK".
Select the "WindowsFormsApplication1" project in Solution Explorer, go to the Properties window, and modify the Project File property value, that defines the file name of the project, to appear as "WinApp.csproj".
Now change the name of the Windows Forms form: select "Form1.cs" in the Solution Explorer, in the Properties window modify the File Name property from "Form1.cs" to "WinApp.cs" then click "Yes" in the dialog box that appears.
Now click "Form1", located in the Solution Explorer window. Once Form1 is selected, you will see that the list of properties has changed in the Properties window. Select the Text property and modify its value from "Form1" to "Windows Application". The Text property defines the name shown on the title bar of the form.
After setting the properties for your solution, project, and Windows Forms form, the IDE will look like Figure 1-7.
Figure 1-7. IDE after setting the properties for your solution, project, and Windows Forms form
Working with Controls
Now that you have your Windows Forms application in place, you can start working with the controls.
The basic element of any Windows application is the control, that plays a key role by providing the visual meaning of the code functionality embedded in an application.
The most commonly used controls are Label, Button, TextBox, RadioButton, CheckBox, ListBox, ComboBox, MenuStrip, and ContextMenuStrip. Applications cannot exist without these controls, so you'll see how you can incorporate some of them into your application.
Try It: Working with the Label, TextBox, and Button Controls
In this exercise, you'll create a Windows Forms application with three labels, two text boxes, and a button. The application will accept your name as input and then flash a "Welcome" message in the form of a dialog box.
- Go to the project named WinApp located under the solution, that you created earlier (refer to Figure 1-7). Ensure that you are in the Design View.
- Drag a Label control onto the form, and position it at the top middle of the form. Select this label, navigate to the Properties window, and set the following properties:
- Set the Name property to lblWelcome.
- Set the Text property to Welcome.
- Select the Font property, click the ellipsis button, and specify the
size of the Label control as 16 points in the Size drop-down list.
- Set the TextAlign property to TopCenter.
Tip: You can also double-click any control in the Toolbox to add it to the form. The difference between dragging a control and double-clicking is that while dragging, you can position the control as you desire on the form. But if you just double-click a control then it will be added to the top-left corner; therefore, if you prefer it in a different location then you still need to drag it to there.
- Drag two more Label controls onto the form, and put them below the "Welcome" text, a little toward the left of the form. Select the first label, navigate to the Properties window, and set the Name property to lblFirstName and the Text property to First Name.
- Now select the second label, navigate to the Properties window, and set its Name property to lblLastName and its Text property to Last Name.
- Drag two TextBox controls onto the form, and put the TextBox named textBox1 in front of the First Name label and the TextBox named textBox2 in front of the Last Name label.
- Select textBox1, go to the Properties window, and set its Name property to txtFname. Select textBox2, and in the Properties window set its Name property to txtLname.
- Drag a Button control onto the form, and place it below the Label and TextBox controls. Select the Button control, go to the Properties window, change the Name property to btnSubmit, and then set its Text property to Submit.
- Now you have your GUI design of the application ready; it should resemble the form shown in Figure 1-8.

Figure 1-8. GUI design of the Windows Application form
It's time to add functionality and switch to the Code View. You will obtain the First Name and Last Name values supplied by the user and flash a message on a click of the Submit button, which means you need to put all the functionality behind the Submit button's click event, that will eventually read the values from the TextBox controls. To do this, continue with the following procedure.
Double-click the Submit button. This will take you to the Code View, and you will see that the btnSubmitClick event template has been added to the code. Now you will add the code to show a dialog box, with a greeting and welcome message for the first name and last name that were entered. To do so, you will use the MessageBox class; this class provides a Show() function to display a dialog box with the provided information. Now let's add the following code inside this btnSubmitClick event to do the desired functionality of a dialog, with a message, a caption in the dialog box's title bar, an OK button, a Cancel button, and an information icon displayed:
MessageBox.Show("Hello" + ' ' + txtFname.Text + ' ' + txtLname.Text + ' ' +











Ankit GuptaPosted May 1, 2018, 7:35 AM
Sir can you help me regarding datagrid view control.i want to get data in griedview on selection of combobox value. i am using dataset as a data source
Ankit GuptaPosted Apr 24, 2018, 4:08 AM
Sir this article is really nice i have learned from it thanking you for such a nice article
Ankit GuptaPosted Apr 24, 2018, 4:06 AM
Sir i have checked the code you have written in your post as i posted before that error is coming in the case of checked of radio button. i have changed the little bit in that now it is working properly in case of male and female. if there is still problem tell me --- if ((chkEmail.Checked ==true ||chkPostMail.Checked==true) && rdbMale.Checked==true) { MessageBox.Show("Hello Mr,You will be contacted by either USPS or E-Mail", "information", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } else if ((chkEmail.Checked==true ||chkPostMail.Checked==true) && rdbFemale.Checked==true) { MessageBox.Show("Hello Mam,You will be contacted by either USPS or E-Mail", "information", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); }
Ankit GuptaPosted Apr 24, 2018, 1:24 AM
Sir in This Code Else part not working when i select the Female Radio button.It Still showing the Male Radio button Message. { if (chkEmail.Checked == true || chkPostMail.Checked == true && rdbMale.Checked == true) { MessageBox.Show("Hello Mr,You will be contacted by either USPS or E-Mail", "information", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } else if (chkEmail.Checked == true || chkPostMail.Checked == true && rdbFemale.Checked == true) { MessageBox.Show("Hello Mam,You will be contacted by either USPS or E-Mail", "information", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); } }
Ankit GuptaPosted Apr 20, 2018, 5:15 AM
Sir i want to develop the window application in that i want rdlc report.Now i will follow your article to develop my application.I am not familar with programming language. I have worked earlier in that so i have little bit knowledge. i want to develop application myself so that i can learn more and more things. Sir can you suggest me any book.If i develop application in your guidance i am really thankful to you.
Ankit GuptaPosted Apr 18, 2018, 2:23 AM
Sir i am getting problem in my ealier application in rdlc
Ankit GuptaPosted Apr 18, 2018, 2:23 AM
Sir can you send me link of that. i try but didnt get it there.
Ankit GuptaPosted Apr 5, 2018, 2:00 AM
Sir can you guide me how to start develop window application @Vidya Vrat Agarwal
Ankit GuptaPosted Apr 4, 2018, 5:11 AM
Hi Sir, can you guide me how to start develop window application in visual studio 2010 and sql server 2008
kiquenet kiquenetPosted Nov 18, 2014, 5:04 AM
Any good patterns and practices using layout Tecnhiques for build Windows Forms complex ? For sample, Filter Search using ComboBox, Textbox, DateTimePicker and Gridview. Maybe be too Panels. And how resize controls if anyone is set Visible = false?
Vidya Vrat AgarwalPosted Aug 7, 2013, 1:14 PM
As Sam and Senthil suggested I moved MDI part to another article and hence removed from here. New article will ne live soon. Thanks for your valuable suggestion.
Vidya Vrat AgarwalPosted Aug 7, 2013, 2:02 AM
Hi Senthil. Tanks for your comment. Actually I did it as one large article so people learn in one shot rather than remembering multiple links.
SenthilkumarPosted Aug 7, 2013, 12:45 AM
If you can split this into multiple and can write as tutorial will be good
Mahesh ChandPosted Jul 31, 2013, 7:24 AM
Agree with @Sam. I don't need to say this but we all know how much effort Vidya has put in this article. Writing can be one of the most time consuming tasks.
Vidya Vrat AgarwalPosted Jul 30, 2013, 11:46 AM
Thanks Sam, sure you advice make sense. My idea of suggesting alphabetical view was that developers normally assume the name of property for example Font, Alignment etc. But Yes if they look for something which is not known in advance by them than Categorized view will be helpful. Thanks again.
Sam HobbsPosted Jul 29, 2013, 7:28 PM
Note that the Alphabetical View of properties is useful when we know the name of a property but not useful when we do not know the name. The Categorized View is useful when we are looking for a property and we know or think we know the category but we do not know the name. The Categorized View should be used when someone is unfamiliar with the properties that are available.
Sam HobbsPosted Jul 29, 2013, 7:19 PM
Thank you for introducing Windows Forms. This is an excellent introduction. The principles, practices and design guidelines are also excellent. This article is also among the largest I have seen in this web site in the past two or three years.
Former memberPosted Jul 29, 2013, 8:11 AM
nice article
ketan italiyaPosted Jul 29, 2013, 8:03 AM
superb....helpful thanks...
Ramesh KartikPosted Jul 29, 2013, 6:03 AM
Gud one
Sourav KayalPosted Jul 29, 2013, 4:40 AM
Nice one