Top Banner
C# Programming: From Problem Analysis to Program Design 1 9 Programmin g Based on Events
56

C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

Dec 19, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 1

9 Programming Based on Events

Page 2: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 2

Chapter Objectives• Explore event-handling procedures in C# by

writing and registering event-handler methods

• Create applications that use the ListBox control object to enable multiple selections from a single control

• Contrast ComboBox to ListBox objects by adding both types of controls to an application

Page 3: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 3

Chapter Objectives (continued)

• Add Menu and TabControl control options to Window forms and program their event-handler methods

• Wire multiple RadioButton and CheckBox object events to a single event-handler method

Page 4: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 4

Delegates• Delegates store references (addresses) to methods,

as opposed to storing actual data

– Delegates form the foundation for events in C#

• Declaration for a delegate looks more like a method declaration than a class definition

– Except, delegate declaration has no body

– Declaration begins with the keyword delegate

• Declaration ends with a parenthesized list of parameters

Page 5: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 5

Delegates (continued)

• Delegate declaration exampledelegate string ReturnsSimpleString( );

• Delegate signature– Identifies what types of methods the delegate represents

– The return type of a delegate becomes part of its identifying signature

• Above Example represents methods that return a string and require no argument static string EndStatement( )

static string ToString( )

static string ReturnSaying( )

Page 6: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 6

Delegates (continued)

• Associate delegate with method(s) by creating delegate instance(s)

– Example

ReturnsSimpleString saying3 = new

ReturnsSimpleString(EndStatement);

• Constructor for delegate of the delegate class always takes just parameter

– Name of a method for the constructor to reference

Page 7: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 7

Delegates (continued)• Delegate identifier references the method sent as

argument to constructor

– Any use of delegate identifier now calls the method

• Methods are said to be wrapped by the delegate

– Delegate can wrap more than one method, called a multicast delegate

• += and -= operators are used to add/remove methods to/ from the delegate chain or invocation list

• Multicast delegates must have a return type of void

Page 8: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 8

Relationship of Delegates to Events• Delegates are used for event-driven application

– Delegate acts as intermediary between objects that are raising or triggering an event, and the object that captures the event and responds to it.

• During compilation, the method or methods that will be called are not determined

• Events as special forms of delegates

– Place a reference to event-handler methods inside a delegate

– Once reference is made, or event is registered, delegate is used to call event-handler method when an event like a button click is fired

Page 9: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 9

Event Handling in C#• Form Designer in Visual Studio did much of the

work for you

– Double-clicked on a Button control object during design

1) Click event is registered as being of interest

2) An event-handler method heading is generated

– Two steps form event wiring process

• Wire an event: associate (identify) a method to handle its event

Page 10: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 10

Event Handling in C# (continued)

• Code associates the methods with an event

this.button1.Click += new System.EventHandler(this.button1_Click);

this.button2.Click += new System.EventHandler(this.button2_Click);

– button1_Click and button2_Click are methods

– Keyword this is added to all code generated by Visual Studio to indicate the current instance of a class

Page 11: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 11

ListBox Control Objects

• Displays list of items for single or multiple selections

– Scroll bar is automatically added when total number of items exceeds the number that can be displayed

• Can add or remove items at design time or dynamically at run time

• Includes number of properties and events

– The Items property used to set initial values

• Click on (Collections) to add items

Page 12: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 12

Adding a ListBox Control Object

Add ListBox control, then

click on Items property

(Collection) to type entries

Figure 9-2 String Collection Editor

Page 13: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 13

ListBox Control Objects (continued)• Name property

– Useful to set for program statements

• Sorted property – Set to true to avoid having to type values in sorted

order

• Register an event for the ListBox– Might want to know when the item selection changes

– Double-clicking on any control registers its default event for the control

– SelectedIndexChanged: default event for ListBox

Page 14: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 14

ListBox Control Objects (continued)• Register its event with the System.EventHandler

this.lstBoxEvents.SelectedIndexChanged += new System.EventHandler (this.listBox1_SelectedIndexChanged);

• Visual Studio adds event-handler methodprivate void listBox1_SelectedIndexChanged

(object sender, System.EventArgs e)

{

}

Page 15: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 15

ListBox Control Objects (continued)

• To retrieve string data from ListBox use Text property

this.txtBoxResult.Text = this.lstBoxEvents.Text;

– Place in method body

– When event fires, selection retrieved and stored in TextBox object

Page 16: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 16

ListBox Control Objects (continued)

Figure 9-3 SelectedIndexChanged event fired

Page 17: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 17

Multiple Selections with a ListBox• SelectionMode Property has values of MultiSimple,

MultiExtended, None, and One

– MultiSimple: use the spacebar and click the mouse

– MultiExtended can also use Ctrl key, Shift key, and arrow keys

foreach(string activity in lstBoxEvents.SelectedItems)

{

result += activity + " ";

}

this.txtBoxResult.Text = result;

Page 18: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 18

ListBox Control Objects (continued)

Figure 9-4 Multiple selections within a ListBox object

Page 19: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 19

ListBox Control Objects (continued)• SelectedItem and SelectedItems return objects

– Store numbers in the ListBox, once retrieved as objects, cast the object into an int or double for processing

• Adding items to a ListBox at run time by using Add( ) method with the Items property

lstBoxEvents.Items.Add("string value to add");

private void btnNew_Click(object sender, System.EventArgs e)

{

lstBoxEvents.Items.Add(txtBoxNewAct.Text);

}

Page 20: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 20

Figure 9-5 Add( ) method executed inside the buttonClick event

ListBoxExample

Page 21: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 21

Page 22: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 22

ListBox Control Properties

Page 23: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 23

ListBox Control Methods

Page 24: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 24

Note that ListBox control inherits members from Control class

ListBox Control Methods (continued)

Page 25: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 25

ComboBox Controls

Extra TextBox object with ComboBox – User selects from list or types new value

Figure 9-6 ComboBox and ListBox objects

Page 26: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 26

ComboBox Controls (continued)

Top line left blank in ComboBox when DropDownStyle property is set to DropDown (default setting)

Figure 9-7 ComboBox list of choices

Page 27: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 27

Handling ComboBox Events• ComboBox only allows a single selection to be made

• Default event-handler method: SelectedIndexChanged( )

– Same as ListBox control object

• Could register KeyPress( ) event-handler method

– BUT, event is fired with each and EVERY keystroke

Page 28: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 28

Programming Event Handlers

• Since ListBox object allows multiple selections, Text property cannot be used

– Text ONLY gets the first one selected

• Use the SelectedItems, SelectedIndices, or Items to retrieve a collection of items selected

– Zero-based structures

– Access them as you would access an element from an array

– SelectedIndices is a collection of indexes

Page 29: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 29

Programming Event Handlers (continued)

Figure 9-8 KeyPress and SelectedIndexChanged events fired

KeyPress( ) event-

handler method

fired with each

keystroke

Page 30: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 30

MenuStrip Controls

• Offers advantage of taking up minimal space• Drag and drop MenuStrip object from toolbox to

your form– Icon representing MenuStrip placed in Component Tray

• Select MenuStrip object to set its properties• To add the text for a menu option, select the

MenuStrip icon and then click in the upper-left corner of the form

Page 31: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 31

MenuStrip Controls (continued)

Drag MenuStrip control to form,

then click here to display Menu

structure

Figure 9-9 First step to creating a menu

Page 32: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 32

MenuStrip Control Objects • Ampersand (&) is typed between the F and o for the

Format option to make Alt+o shortcut for Format

Figure 9-10 Creating a shortcut for a menu item

Page 33: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 33

MenuStrip Control Objects (continued)

• To create separators, right-click on the text label (below the needed separator)

• Select Insert Separator

Figure 9-11 Adding a separator

Page 34: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 34

MenuStrip Control Objects (continued)

Figure 9-12 Setting the Property for the ToolTip control

Set the text to be displayedwhen the cursor is rested on top of the control

Page 35: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 35

Wire Methods to Menu Option Event

• Set the Name property for each menu option

– Do this first, then wire the event

• Click events are registered by double-clicking on the Menu option

• When the menu option is clicked, the event triggers, happens, or is fired

Page 36: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 36

Adding Predefined Standard Windows Dialog Boxes

• Included as part of .NET

• Dialog boxes that look like standard Windows dialog boxes

– File Open, File Save, File Print, and File Print Preview

– Format Font

– Format Color dialogs

Page 37: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 37

Adding Predefined Standard Windows Dialog Boxes – Color

private void menuColor_Click(object sender, System.EventArgs e){ colorDialog1.Color = lblOutput.ForeColor; if (colorDialog1.ShowDialog( ) != DialogResult.Cancel ) { lblOutput.ForeColor = colorDialog1.Color; }}

Retrieves the current ForeColor property setting

for the Label object

Checks to see if Cancel button

clicked Set to

selection made

Page 38: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 38

Adding Predefined Standard Windows Dialog Boxes – Color (continued)

Figure 9-14 Color dialog box menu option

Page 39: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 39

Adding Predefined Standard Windows Dialog Boxes – Font

private void menuFont_Click (object sender, System.EventArgs e)

{

fontDialog1.Font =

lblOutput.Font;

if (fontDialog1.ShowDialog( )

!= DialogResult.Cancel )

{

lblOutput.Font =

fontDialog1.Font ;

}

}Figure 9-15 Font dialog box menu option

Page 40: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 40

CheckBox Objects• Appear as small boxes

– Allow users to make a yes/no or true/false selection

• Checked property set to either true or false depending on whether a check mark appears or not

– Default false value

• CheckChanged( ) – default event-handler method

– Fired when CheckBox object states change

• Can wire one event handler to multiple objects

Page 41: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 41

Wiring One Event Handler to Multiple Objects

• Using Properties window, click on the Events Icon • Click the down arrow associated with that event• Select method to handle the event• Follow the same steps for other objects

Page 42: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 42

Wiring One Event Handler to Multiple Objects (continued)

Figure 9-16 Wiring the event-handler method

Page 43: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 43

CheckBox Object

Figure 9-17 ComputeCost_CheckedChanged( ) method raised

Page 44: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 44

GroupBox Objects• CheckBox objects may be grouped together for

visual appearance

• Can move or set properties that impact the entire group

• A GroupBox control should be placed on the form before you add objects

• GroupBox control adds functionality to RadioButton objects

– Allow only one selection

Page 45: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 45

RadioButton Objects• Appear as small circles

• Give users a choice between two or more options

– Not appropriate to select more than one CheckBox object with RadioButton objects

• Group RadioButton objects by placing them on a Panel or GroupBox control

– Setting the Text property for the GroupBox adds a labeled heading over the group

Page 46: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 46

RadioButton Objects (continued)

Figure 9-18 GroupBox and RadioButton objects added

Page 47: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 47

RadioButton Objects (continued)

• Turn selection on

this.radInterm.Checked = true;

• Raise a number of events, including Click( ) and CheckedChanged( ) events

• Wire the event-handler methods for RadioButton objects, just like CheckBox

Page 48: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 48

RadioButton Objects (continued)• Register ComputeCost_CheckedChanged( )

method

Figure 9-19 Wired Click event

Page 49: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 49

RadioButton Objects (continued)

• ComputeCost_CheckedChanged( ) methodif (this.radBeginner.Checked){ cost +=10; this.lblMsg.Text = "Beginner “ + “-- Extra $10 charge";}else// more statements

Page 50: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 50

ComputeCost_CheckChanged( ) and Click( ) Events Raised

Figure 9-20 ComputeCost_CheckedChanged( ) and Click( ) events raised

Page 51: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 51

TabControl Controls

• Sometime an application requires too many controls for a single screen

• TabControl object displays multiple tabs, like dividers in a notebook

• Each separate tab can be clicked to display other options

• Add a TabControl object to the page by dragging the control from the Container section of the Toolbox

Page 52: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 52

TabControl Controls (continued)

Figure 9-21 Tabbed controlled application

Page 53: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 53

TabControl Controls (continued)

Figure 9-22 TabControl object stretched to fill form

Page 54: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 54

TabControl Controls (continued)

• TabPage property enables you to format individual tabs

• Clicking the ellipsis beside the Collection value displays the TabPage Collection Editor

Page 55: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 55

Chapter Summary• Event-handling procedures

– Registering an event

• ListBox control for multiple selections

• ComboBox versus ListBox objects

Page 56: C# Programming: From Problem Analysis to Program Design1 9 Programming Based on Events.

C# Programming: From Problem Analysis to Program Design 56

Chapter Summary (continued)• Adding controls to save space

– MenuStrip controls

– TabControl

• Use of GroupBox controls

• RadioButton versus CheckBox objects