C# Programming: From Problem Analysis to Program Design, 2nd ed. Chapter 8 Introduction to Windows Programming At a Glance Instructor’s Manual Table of Contents ♦ Chapter Overview ♦ Chapter Objectives ♦ Instructor Notes ♦ Quick Quizzes ♦ Discussion Questions ♦ Projects to Assign ♦ Key Terms 8-1 C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-2 Lecture Notes Chapter Overview In this chapter, students extend their knowledge of programming by creating applications that capture and respond to user input. A different way of programming based on interactively responding to events such as mouse clicks is introduced. Windows-based applications using the .NET Framework Class Library are built. Classes that enable highly interactive, attractive, graphical user interface (GUI) applications are introduced. The drag-and-drop construction approach available with Visual Studio is illustrated. Chapter Objectives In this chapter, students will: • • • • • • • Differentiate between the functions of Windows applications and console applications Learn about graphical user interfaces Become aware of some elements of good design Use C# and Visual Studio to create Windows-based applications Create Windows forms and be able to change form properties Add control objects such as buttons, labels, and text boxes to a form Work through a programming example that illustrates the chapter’s concepts Instructor Notes CONTRASTING WINDOWS AND CONSOLE APPLICATIONS With a console-based application, each line in the Main ( ) method is executed sequentially. Then the program halts. Method calls might branch to different locations in your program; however, control always returns to Main ( ). Programs retrieve data by calling the operating system to get data, and they call on the operating system to output data through method calls such as WriteLine( ) or Write( ). Once launched, the Windows application sits in a process loop waiting for an event— notification from the operating system that an action, such as the user clicking the mouse or pressing a key, has occurred. Instead of calling on the operating system with a request, as console applications do, Windows applications receive messages from the operating system that an event has occurred. Methods called event handlers indicate what should be done when an event occurs. C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-3 Both console and Windows applications begin execution in the Main ( ) method. However, unlike console-based applications that exit after all statements have been sequentially executed, Windows-based applications, once they are launched, sit idly waiting for notification of a registered event. These event-handler methods may be executed in a different order every time your application runs. The program remains in the operating system environment in the process loop. This means your program could be minimized, resized, or closed like other Windows applications. Windows applications not only function differently, they also look different. Quick Quiz 1. True or False: Windows applications do not have a Main ( ) method. Answer: False 2. Special methods called ________ _________ are written to indicate what should happen when an event such as a mouse click occurs. Answer: event handlers 3. When a Windows application is executed, it sits in a ________ ____________. Answer: process loop 4. True or False: Windows applications also look different than console-based applications. Answer: True GRAPHICAL USER INTERFACES Program interaction with console-based applications have been limited to accepting input through the ReadLine ( ) method and displaying output at the DOS console window. The interfaces were not graphical. Windows applications include a graphical user interface (GUI). A graphical user interface (GUI) can include menus, buttons, pictures, and text in many different colors and sizes. These controls can display and respond to user interaction. The form is a container waiting to hold additional controls. Forms have a title bar, complete with an icon on the left, a textual caption in the title bar, and the typical Windows minimize, maximize, and close buttons. Visual Studio Integrated Development Environment (IDE) automatically generates all the code needed for a blank Windows form. Use the built-in, drag-and-drop construction of the IDE to add the controls. Most of the classes for developing Windows-based application are organized in the System.Windows.Forms namespace. Use the using directive to import types or classes from the System.Windows.Forms namespace. Visual Studio automatically adds this reference and imports the namespace when you create a Windows Application Project using the IDE. The class heading definition includes the class name and a colon followed by another class name. The second class is called the base class; the first is called the derived class. C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-4 The heading added is: public class Form1 : Form The new class inherits all the functionality of the base class. Form is a predefined .NET class that includes a number of methods and properties used to create a basic Windows screen. Windows forms and controls offer a wide variety of changeable properties including Text, Color, Font, Size, and Location. Much of the power of Visual Studio lies in having these properties readily available and easy to change or add through IntelliSense. Text is a property that can be used to set or get the caption of the title bar for the window. Execution for Windows-based programs begins in the Main( ) method. First statement instantiates or creates an object of the Form1 class (Form1 winForm = new Form1( );). Last statement in the body of Main( ) calls the Run( ) method (Application.Run(winForm);). Application class is also defined as part of the System.Windows.Forms namespace. The object that is instantiated from the Form1 class is sent as the argument to its Run( ) method. This Run( ) method call is what displays the form and places the application in a process loop so that it receives messages from the operating system when events of interest to the application are fired. The Exit( ) method stops an application and closes all of its windows. Quick Quiz 1. What statement places a Windows application in the process loop? Answer: Application.Run(formName); 2. True or False: In a class heading such as "public class Form1 : Form", Form1 is the derived class. Answer: True 3. Identify two Form properties that can be changed. Answer: Text and Font 4. Give three examples of Control objects. Answer: Button, Menu, Label ELEMENTS OF GOOD DESIGN Appearance matters! The goal should be to develop applications that are usable, that permit users to spot items in the windows quickly, and that enable users to interact with your program. A large field of research, called human-computer interaction (HCI), concentrates on the design and implementation of interactive computing systems for human use. Few HCI considerations include design consideration in the area of consistency, alignment, avoid clutter, color, and the target audience. C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-5 Consistency Consistent placement of items is important. Consistent sizing of items is important. Consistent appearance of items that are performing the same functionality is also important. Unless you are trying to call attention to an item, keep the item the same as other items. Use contrast to bring attention. Alignment Use alignment for grouping items. When you place controls on a form, place similar items together. They can be lined up to call attention to the fact that they belong together. Avoid Clutter Do not crowd a form with too many controls. Fonts should be large enough to be legible. Color Background colors and foreground text colors should contrast each other. Avoid using bright colors (such as reds), especially for backgrounds—this can result in user eye fatigue. You can use color as an attention getter, but do not abuse it. Color can play a significant role in your design. Target Audience Think about the design of an interface in terms of who will be using it and on what platform it will be displayed. Quick Quiz 1. True or False: Always try to include as many controls on the form as you can place. Answer: False 2. True or False: Use bright colors on the form to call attention to the controls. Answer: False 3. True or False: Forms should include a maximum of three controls per container. Answer: False 4. Identify three issues that should be taken into consideration when you design a form. Answer: Avoid clutter, think about the intended audience, and be consistent with the placement of controls on the form USE C# AND VISUAL STUDIO TO CREATE WINDOWS-BASED APPLICATIONS Visual Studio automatically generates code when you create a Windows application. Begin by selecting File>New>Project and selecting Visual C# Project as the Project Type with Windows Application selected from the list of Templates. Browse to the location where you want to store your work. Use the View menu to display different windows, such as the Toolbox, Solution Explorer, Class View, Properties, and Dynamic Help windows. C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-6 Experiment with the pushpin icon on the title bar of specific windows. The Auto Hide feature minimizes that window. Quick Quiz 1. Which template do you select for the project type if you plan to design an application that shows a windows form on the screen? Answer: Windows Application 2. The ________ icon can be used to minimize the window and place a tab for it in the current workspace. Answer: pushpin 3. True or False: Visual Studio will generate much of the code for you to create a Windows form. Answer: True 4. List three specific windows that can be opened in the workspace when a Windows application is being created. Answer: Class, Solutions Explorer, Dynamic Help WINDOWS FORMS The top-level window for an application is called a “form”. There is an extensive collection of Control classes including a Form class, which is used as a container to hold other controls. Windows Form Properties The Properties window is used to view and change the design time properties and events of an object. In the Properties window, properties that have a plus symbol (+) to the left of the property name indicate that the property can be expanded. Groups of properties are collapsed together for easier navigation. Use intuitive names for most of the properties. Beginning with Visual Studio 2005, the IDE separates the source code into three files when you create a simple Windows application. Initially, these files are named Form1.cs, Form1.Designer.cs and Program.cs. The first two files, Form1.cs and Form1.Designer.cs, both include partial class definitions for the Form1 class. It is recommended that you never edit the Form1.Designer.cs file. You will normally only be editing the Form1.cs file. The Program.cs file contains the Main( ) method, where execution always begins. Inspecting the Code Generated by Visual Studio #region is one of the preprocessor directives used to mark sections of code that can be expanded or collapsed. Visual Studio adds a region labeled “Windows Form Designer generated code”. Clicking (+) expands the listing. There is also a #endregion. C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-7 Comparing the Code of Example 8-1 to Example 8-2 Visual Studio uses a method named InitializeComponent ( ) to build the form at run time. The call to this method is the only statement in the constructor. All code setting the properties that are set during design are placed in InitializeComponent ( ) method. Each of the properties are suffixed with the keyword this, referring to the current instance of a class. In the call to the Run ( ) method ( Application.Run(new Form1( )); ), no identifier is associated with the Form1 object. The new keyword creates an anonymous (unnamed) instance of Form1. The Form1 object identifier is not used anywhere else. Thus, there is no reason to name it. The Dispose ( ) is added by Visual Studio to perform memory management. The automatic garbage collector releases memory from the application after the program is halted. It cleans up or releases unused resources back to the operating system. Windows Form Events The topic of Chapter 9 is handling events. One way to add a method to handle events in Visual Studio is to find the event in the list of events (from the Properties window with the lightning bolt (Events) ) and double-click on the event name. Code is automatically added to the program. In the InitializeComponent ( ) method, the event is registered as being of interest using a statement similar to: this.FormClosing += new System.Windows.Forms.FormClosingEventHandler (this.Form1_FormClosing); The above statement registers the program to be notified when a user is closing the application. In addition, an event-handler method heading and an empty body is added to the code as shown here: private void Form1_FormClosing(object sender, FormClosingEventArgs e) { } Quick Quiz 1. The top-level control onto which all others controls are added is called a _________ in a Windows application. Answer: form 2. True or False: When you are using Visual Studio to create a Windows application, you must type a using directive that reads using System.Windows.Forms;. Answer: False 3. True or False: Visual Studio inserts #region …#endregion preprocessor directive with a label of Windows Form Designer generated code. Answer: True 4. When does the Dispose( ) method do? Answer: It releases memory from the application after the program is halted. C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-8 CONTROLS System.Windows.Forms namespace includes controls with names such as Button, Label, TextBox, ComboBox, MainMenu, ListBox, CheckBox, RadioButton, and MonthCalendar. Each of these controls are classes with properties and methods. Each fires events—some of which you should write methods for—indicating what to do when its event is fired. A lot of code is added automatically for you when you place the control on the form. All of the control classes that can be added to a form are derived from the System.Windows.Forms.Control class, which means they inherit the characteristics of the Control class. Call attention to Figure 8-8 and 8-9. They show the controls that can be added. Place, Move, Resize, and Delete Control Objects Either double-click the control or drag and drop the control to the correct location on the form to place it. Resize controls using the standard Windows conventions of positioning the mouse pointer over the resizing handles. Clicking the Delete or Backspace key, once the control is selected, removes the control visually from the Form Designer view, but also removes all the constructor code and associated property changes relating to the selected object. With the release of Visual Studio 2005, the Windows Forms Designer has a SnapLine feature to help you accomplish precise layout of controls on your form. Horizontal and vertical line segments are dynamically created by the SnapLine feature to assist in the layout of controls. Options under the Format menu including Align, Make Same Size, Horizontal Spacing, and Vertical Spacing should be explored. After the controls are selected, use, for example, Align to align lefts, rights, or centers of controls. The Make Same Size selection is useful for sizing objects for consistency. Note that when you select more than one control to format, the last control selected is the one used as the template for the action. The Horizontal and Vertical Spacing options enable you to increase or decrease the amount of blank space displayed between objects. Methods and Properties of the Control Class Call attention to Table 8-2 for a list of Control properties inherited by control objects such as buttons and labels. Table 8-3 includes a list of the control methods. Some of the methods provide the same functionality as one or more of the properties. For example, the Show ( ) method functions the same way as setting the Visible property to true; Hide( ) does the same thing as setting the Visible property to false. Derived Classes of the System.Windows.Form.Control Class Figure 8-11 shows a visual representation of many of the controls you add to a form. They are labeled. • Label—used to provide descriptive text for another control. Can also be used to display information at run time. A number of properties can be set including Text, TextAlign, Visible, Font, and Location. C# Programming: From Problem Analysis to Program Design, 2nd ed. • • 8-9 TextBox—used to enter data or display text during run time. Probably the most commonly used control because it can be used for both input and output. Text property is used to get or set the string value in the control. Other properties that are of interest include: MultiLine, ScrollBars, MaxLength, PasswordChar, and CharacterCasing. Table 8-6 describes these properties. Methods, including AppendText ( ), which adds text to the end of the current text of the TextBox and Clear( ), can be used with TextBox objects. Button—Objects that increase functionality. They enable a user to click a button to perform a specific task. When it is clicked by a user, the event-handler method is automatically called up—if the button has an event-handler method—and is registered as an event to which your program is planning to respond. Button objects have a number of properties, methods, and events. They also inherit the properties, methods, and events from the Control class. Specific properties and methods of interest include Enabled, Focused, Focus( ), AcceptButton, and Name. TabIndex, inherited from Control, is useful for setting or getting the tab order of the controls on a form. By default, the tab order is the same order as the order of how the controls are added to the form. You can change this order when you are in View Tab Order by clicking the controls sequentially to establish the new order. Add a Click event to an object, such as a button, by double-clicking on the object in the Form Designer. When you add the event this way, the default event is registered and the method heading along with the empty body for the method is added. All that is required is for the programmer to write the program statements that should be executed when the event is fired. Another way to register an event is to select the event from the Properties window after clicking the Events icon. Quick Quiz 1. True or False: Once controls, such as buttons or text boxes are added to a form, they can be resized, moved, or deleted using the standard Windows conventions. Answer: True 2. True or False: The Button class is derived from the Form class. Answer: False 3. The control that is probably used more often than other controls for both input and output is the ______. Answer: TextBox 4. The property that is used with most controls to set the caption for the control is the _______ property. Answer: Text C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-10 PROGRAMMING EXAMPLE: TempAgency Application This application is created to demonstrate the design and implementation of a graphical user interface for a Windows application. An application for a TempAgency is designed that accepts as input the contractor’s name, number of dependents, and the number of hours worked. It displays the gross pay, deductions, and the net pay for the worker. Two classes are constructed to separate the business logic from the presentation details. The Employee class defines a template for a typical payroll employee object. It includes the behaviors for determining withholding deductions and calculating the net take-home pay. The second-class instantiates objects of the .NET predefined Control classes (labels, text boxes, and button) and adds those objects to the Form object. Structured English (pseudocode) and class diagrams are included with the example. A prototype for the desired output is shown. Tables are shown documenting the properties that were set during design. The complete program listing is shown in the book and available as a Visual Studio project to demo for the class. Discussion Questions Some interesting topics of discussion in this chapter include: • • • Select a Windows application, such as a game or productivity package, and analyze the user interface in terms of the design considerations included in this chapter. Compare and contrast a typical Windows application to a console-based application. Why can a Windows application take twice as much time to develop as a console-based application? Projects to Assign All of the Multiple Choice Exercises, Problems 1-20 Odd numbered Short Answer Exercises, Problems 21-25 Programming Exercises, Problems 3, 5, 9, and 10 Key Terms ¾ controls: objects that can display and respond to user interaction ¾ derived class: new class that that inherits the characteristics of the base class ¾ event: a notification from the operating system that an action, such as the user clicking the mouse or pressing a key, has occurred ¾ event handlers: methods that indicate what should be done when an event such as a mouse click on a button or the press of a key occurs ¾ graphical user interface (GUI): the menus, buttons, pictures, and text front end portion of the program ¾ Human-Computer Interaction (HCI): design and implementation of interactive computing systems for human use C# Programming: From Problem Analysis to Program Design, 2nd ed. 8-11 ¾ interface: the front end of a program—the visual image you see when you run a program ¾ preprocessor directive: directive indicating what should be done prior to processing the program statements ¾ Windows applications: applications that are usually graphical and that use the event model and receive messages from the operating system that an event has occurred