9 Programming Based on Events

Download Report

Transcript 9 Programming Based on Events

9
Programming
Based on
Events
C# Programming: From Problem Analysis to Program Design
2nd Edition
C# Programming: From Problem Analysis to Program Design
1
Chapter Objectives
• Define, create, and use delegates and examine
their relationship to events
• 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
2
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
• Work through a programming example that
illustrates the chapter’s concepts
C# Programming: From Problem Analysis to Program Design
3
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
• Unlike a method, the return type of a delegate becomes
part of its identifying signature
C# Programming: From Problem Analysis to Program Design
4
Delegates (continued)
• Delegate declaration example
delegate string ReturnsSimpleString( );
• Delegate signature
– Identifies what types of methods the delegate represents
• 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
5
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
6
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
7
Sample
Consider the following:
delegate void GreetingDelegate(string s);
GreetingDelegate can now encapsulate any method
as long as it has a void return type and a single
string argument.
You can now do this:
public static void Hello(string s) {
Console.WriteLine("Hello, {0}!", s);
}
Sample (continued)
Because the Hello() method matches the GreetingDelegate
definition, you can assign a reference the the Hello() method
to a new instance of GreetingDelegate as follows:
GreetingDelegate myDel = new GreetingDelegate(Hello);
Once the Hello() method is assigned to myDel, then each of
the following statements will result in the same output:
Hello, Kim!
Hello( "Kim" );
myDel( "Kim" );
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
• 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
10
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
11
Event Handling in C# (continued)
• Code associates the methods with a delegate
this.button1.Click += new System.EventHandler(this.button1_Click);
this.button2.Click += new System.EventHandler(this.button2_Click);
– System.EventHandler is a delegate type
– 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
12
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
13
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
14
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
15
ListBox Control Objects (continued)
• Register its event with the System.EventHandler
delegate
this.lstBoxEvents.SelectedIndexChanged += new
System.EventHandler
(this.listBox1_SelectedIndexChanged);
• Visual Studio adds event-handler method
private void listBox1_SelectedIndexChanged
(object sender, System.EventArgs e)
{
}
C# Programming: From Problem Analysis to Program Design
16
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
17
ListBox Control Objects (continued)
Figure 9-3 SelectedIndexChanged event fired
C# Programming: From Problem Analysis to Program Design
18
ListBox.Items
ListBox.Items
ListBox.Items
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
21
ListBox Control Objects (continued)
Figure 9-4 Multiple selections within a ListBox object
C# Programming: From Problem Analysis to Program Design
22
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
23
ListBoxExample
Figure 9-5 Add( ) method executed inside the buttonClick event
C# Programming: From Problem Analysis to Program Design
24
C# Programming: From Problem Analysis to Program Design
25
ListBox Control Properties
C# Programming: From Problem Analysis to Program Design
26
ListBox Control Methods
C# Programming: From Problem Analysis to Program Design
27
ListBox Control Methods (continued)
Note that ListBox control inherits members from
Control class
C# Programming: From Problem Analysis to Program Design
28
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
29
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
30
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
31
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
32
Programming Event Handlers
(continued)
KeyPress( )
eventhandler
method
fired with
each
keystroke
Figure 9-8 KeyPress and SelectedIndexChanged events fired
C# Programming: From Problem Analysis to Program Design
33
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
34
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
35
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
36
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
37
MenuStrip Control Objects
(continued)
Set the text to
be displayed
when the
cursor is
rested on top
of the control
Figure 9-12 Setting the Property for the ToolTip control
C# Programming: From Problem Analysis to Program Design
38
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
39
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
40
Adding Predefined Standard
Windows Dialog Boxes – Color
Retrieves the
private void menuColor_Click(object sender,
current ForeColor
System.EventArgs e)
property setting
{
for the Label
object
colorDialog1.Color = lblOutput.ForeColor;
if (colorDialog1.ShowDialog( ) != DialogResult.Cancel )
{
Checks to see if
lblOutput.ForeColor = colorDialog1.Color;
Cancel button
}
clicked
}
Set to
selection
made
C# Programming: From Problem Analysis to Program Design
41
Adding Predefined Standard Windows
Dialog Boxes – Color (continued)
Figure 9-14 Color dialog box menu option
C# Programming: From Problem Analysis to Program Design
42
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
43
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
44
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
45
Wiring One Event Handler to
Multiple Objects (continued)
Figure 9-16 Wiring the event-handler method
C# Programming: From Problem Analysis to Program Design
46
CheckBox Object
Figure 9-17 ComputeCost_CheckedChanged( ) method raised
C# Programming: From Problem Analysis to Program Design
47
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
48
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
49
RadioButton Objects (continued)
Figure 9-18 GroupBox and RadioButton objects added
C# Programming: From Problem Analysis to Program Design
50
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
51
RadioButton Objects (continued)
• Register ComputeCost_CheckedChanged( )
method
Figure 9-19 Wired Click event
C# Programming: From Problem Analysis to Program Design
52
RadioButton Objects (continued)
• ComputeCost_CheckedChanged( ) method
if (this.radBeginner.Checked)
{
cost +=10;
this.lblMsg.Text =
"Beginner “ +
“-- Extra $10 charge";
}
else
// more statements
C# Programming: From Problem Analysis to Program Design
53
ComputeCost_CheckChanged( ) and
Click( ) Events Raised
Figure 9-20 ComputeCost_CheckedChanged( )
and Click( ) events raised
C# Programming: From Problem Analysis to Program Design
54
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
55
TabControl Controls (continued)
Figure 9-21 Tabbed controlled application
C# Programming: From Problem Analysis to Program Design
56
TabControl Controls (continued)
Figure 9-22 TabControl object stretched to fill form
C# Programming: From Problem Analysis to Program Design
57
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
58
DinerGui
Application
Example
Figure 9-24 Problem specification for DinerGUI example
C# Programming: From Problem Analysis to Program Design
59
DinerGui Application Example
(continued)
C# Programming: From Problem Analysis to Program Design
60
DinerGui Application Example
(continued)
Figure 9-25 Prototype for DinerGUI example
C# Programming: From Problem Analysis to Program Design
61
DinerGui
Application
Example (continued)
Figure 9-26
Class diagrams
C# Programming: From Problem Analysis to Program Design
62
DinerGui Application Example
(continued)
Figure 9-35 Clear Order click event fired
C# Programming: From Problem Analysis to Program Design
63
Chapter Summary
• Delegates
• Event-handling procedures
– Registering an event
• ListBox control for multiple selections
• ComboBox versus ListBox objects
C# Programming: From Problem Analysis to Program Design
64
Chapter Summary (continued)
• Adding controls to save space
– MenuStrip controls
– TabControl
• Use of GroupBox controls
• RadioButton versus CheckBox objects
C# Programming: From Problem Analysis to Program Design
65