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

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

Transcript of 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

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

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

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

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( )

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

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

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

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

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

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

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

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

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)

{

}

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

C# Programming: From Problem Analysis to Program Design 16

ListBox Control Objects (continued)

Figure 9-3 SelectedIndexChanged event fired

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;

C# Programming: From Problem Analysis to Program Design 18

ListBox Control Objects (continued)

Figure 9-4 Multiple selections within a ListBox object

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);

}

C# Programming: From Problem Analysis to Program Design 20

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

ListBoxExample

C# Programming: From Problem Analysis to Program Design 21

C# Programming: From Problem Analysis to Program Design 22

ListBox Control Properties

C# Programming: From Problem Analysis to Program Design 23

ListBox Control Methods

C# Programming: From Problem Analysis to Program Design 24

Note that ListBox control inherits members from Control class

ListBox Control Methods (continued)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C# Programming: From Problem Analysis to Program Design 43

CheckBox Object

Figure 9-17 ComputeCost_CheckedChanged( ) method raised

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

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

C# Programming: From Problem Analysis to Program Design 46

RadioButton Objects (continued)

Figure 9-18 GroupBox and RadioButton objects added

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

C# Programming: From Problem Analysis to Program Design 48

RadioButton Objects (continued)• Register ComputeCost_CheckedChanged( )

method

Figure 9-19 Wired Click event

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

C# Programming: From Problem Analysis to Program Design 50

ComputeCost_CheckChanged( ) and Click( ) Events Raised

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

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

C# Programming: From Problem Analysis to Program Design 52

TabControl Controls (continued)

Figure 9-21 Tabbed controlled application

C# Programming: From Problem Analysis to Program Design 53

TabControl Controls (continued)

Figure 9-22 TabControl object stretched to fill form

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

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

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