programming based on events -...
TRANSCRIPT
C# Programming: From Problem Analysis to Program Design
1
Programming
Based on
Events
C# Programming: From Problem Analysis to Program Design
4th Edition
10
C# Programming: From Problem Analysis to Program Design
2
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
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
• Design and create a Windows Presentation
Foundation (WPF) application
• Work through a programming example that
illustrates the chapter’s concepts
C# Programming: From Problem Analysis to Program Design
4
Delegates
• Delegates form the foundation for events in C#
• Delegates store references (addresses) to methods
– For events, it is the address of which method to invoke when an event is fired
• Delegates enable you to pass methods as arguments (as opposed to data) to other methods
• Delegate signature
– Identifies what types of methods the delegate represents
C# Programming: From Problem Analysis to Program Design
5
Delegates (continued)
• 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
– Recall signature for method includes only the name and the number and type of parameters – not the return type
C# Programming: From Problem Analysis to Program Design
6
Defining Delegates
• Delegate declaration example
delegate string ReturnsSimpleString( );
• Above example represents methods that return a
string and require no argument
– Given the signature, the following methods could be
associated or referenced by the delegate
static string EndStatement( )
static string ToString( )
static string ReturnSaying( )
C# Programming: From Problem Analysis to Program Design
7
Creating Delegate Instances
• Think of the delegate as a way of defining or
naming a method signature
• Associate delegate with method(s) by creating
delegate instance(s)
ReturnsSimpleString saying3 = new
ReturnsSimpleString(EndStatement);
• Constructor for delegate of the delegate class
always takes just parameter (method name)
– Name of a method for the constructor to reference
C# Programming: From Problem Analysis to Program Design
8
Using Delegates
• Delegate identifier references the method sent as
argument to constructor
– Any use of delegate identifier now calls that 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
Using Delegates (continued)
delegate string ReturnsSimpleString( );
static void Main ( )
{
int age = 18;
ReturnsSimpleString saying1 = new ReturnsSimpleString(AHeading);
ReturnsSimpleString saying2 = new
ReturnsSimpleString((age + 10).ToString);
ReturnsSimpleString saying3= new ReturnsSimpleString(EndStatement);
MessageBox.Show(saying1( ) + saying2( ) + saying3( ));
}
C# Programming: From Problem Analysis to Program Design
9
Using Delegates (continued)
• These methods were associated (referenced) by
the ReturnsSimpleString ( ) delegate // Method that returns a string.
static string AHeading()
{
return "Your age will be ";
}
// Method that returns a string.
static string EndStatement( )
{
return " in 10 years.";
}
C# Programming: From Problem Analysis to Program Design
10
Using Delegates (continued)
C# Programming: From Problem Analysis to Program Design
11
Figure 9-1 Windows-based form
Review DelegateExample
C# Programming: From Problem Analysis to Program Design
12
Relationship of Delegates to Events
• 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 are 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
13
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
14
Event-Handler Methods
• 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
15
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
C# Programming: From Problem Analysis to Program Design
16
ListBox Control
• Includes number of properties and events
– Items property
• Used to set initial values
• Click on (Collections) to add items
– Name property
• Useful to set if you are going to write program statements to manipulate the control
– Sorted property
• Set to true to avoid having to type values in sorted order
ListBox Control Properties
C# Programming: From Problem Analysis to Program Design
17
Table 10-2 ListBox properties
C# Programming: From Problem Analysis to Program Design
18
Adding a ListBox Control Object
Figure 10-2 String Collection Editor
Add ListBox
control, then
click on Items
property
(Collection) to
type entries
ListBox Control Methods
C# Programming: From Problem Analysis to Program Design
19
Table 10-3 ListBox methods
Events are
methods….
Default
event for
ListBox
Registering A ListBox Event
• 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
20
C# Programming: From Problem Analysis to Program Design
21
ListBox Event Handlers
• 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
22
ListBox Control Objects
• 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
23
ListBox Control Objects (continued)
Figure 10-3 SelectedIndexChanged event fired
C# Programming: From Problem Analysis to Program Design
24
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
25
ListBox Control Objects (continued)
Figure 10-4 Multiple selections within a ListBox object
C# Programming: From Problem Analysis to Program Design
26
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
C# Programming: From Problem Analysis to Program Design
27
Adding Items to a ListBox • Add items at run time 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
28
Figure 10-5 Add( ) method executed inside the buttonClick event
ListBoxExample
ListBoxExample
private void lstBxEvents_SelectedIndexChanged
(object sender, EventArgs e)
{
string result = " ";
foreach (string activity in lstBxEvents.SelectedItems)
result += activity + " ";
this.txtBxResult.Text = result;
}
C# Programming: From Problem Analysis to Program Design
29
Review ListBoxExample
C# Programming: From Problem Analysis to Program Design
30
ListBoxExample (continued)
Table 10-1 ListBoxExample property values
C# Programming: From Problem Analysis to Program Design
31
ListBoxExample (continued)
Table 10-1 ListBoxExample property values (continued)
ComboBox Objects
• In many cases, ListBox and ComboBox controls
can be used interchangeably
• ListBox control is usually used when you have all
the choices available at design time
• ComboBox facilitates displaying a list of
suggested choices with an added feature
– ComboBox objects contain their own text box field as
part of the object
C# Programming: From Problem Analysis to Program Design
32
GardeningForm Example
• New Project created
– Includes ListBox and ComboBox Objects
• Create Project like previous ones
– Add Label
– Change property values for form
– Drag and drop ComboBox and ListBox onto form
C# Programming: From Problem Analysis to Program Design
33
C# Programming: From Problem Analysis to Program Design
34
Programming Event Handlers
• For ListBox, use 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
– Text ONLY gets the first one selected
C# Programming: From Problem Analysis to Program Design
35
Adding ComboBox Controls
Extra TextBox
object with
ComboBox – User selects
from list or
types new
value
Figure 10-6 ComboBox and ListBox objects
C# Programming: From Problem Analysis to Program Design
36
Adding ComboBox Controls (continued)
Top line left
blank in
ComboBox
when
DropDownStyle
property is set to
DropDown
(default setting)
Figure 10-7 ComboBox list of choices
ComboBox
• Double clicking on ComboBox object registers it’s
default event (SelectedIndexChanged( ) this.cmboFlowers.SelectedIndexChanged += new
System.EventHandler(this.cmboFlowers_SelectedIndexChanged);
this.txtBxResultFlowers.Text = this.cmboFlowers.Text;
C# Programming: From Problem Analysis to Program Design
37
This line gets
added to
.designer.cs
Use .Text
property to
retrieve the
value
C# Programming: From Problem Analysis to Program Design
38
Handling ComboBox Events
• ComboBox only allows a single selection to be made
– ListBox allows multiple selections
• 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
39
Programming Event Handlers
(continued)
Figure 10-8 KeyPress and SelectedIndexChanged events fired
KeyPress( )
event-
handler
method
fired with
each
keystroke
C# Programming: From Problem Analysis to Program Design
40
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
41
Adding Menus
Figure 10-9 First step to creating a menu
Drag MenuStrip
control to form,
then click here to
display Menu
structure
C# Programming: From Problem Analysis to Program Design
42
MenuStrip Control Objects
• Ampersand (&) is typed between the F and o for the
Format option to make Alt+o shortcut for Format
Figure 10-10 Creating a shortcut for a menu item
C# Programming: From Problem Analysis to Program Design
43
MenuStrip Control Objects (continued)
• To create separators,
right-click on the text
label (below the
needed separator)
• Select Insert
Separator
Figure 10-11
Adding a separator
Menu
• To add tool tip, drag ToolTip control from
Toolbox anywhere on the form
– ToolTip, like MenuStrip rest in Component Tray below
design surface
• Separate ToolStripMenuItem objects are created
fro each selectable menu option
– Each has its own properties
– Each can have its own even handler method
C# Programming: From Problem Analysis to Program Design
44
C# Programming: From Problem Analysis to Program Design
45
MenuStrip Control Objects (continued)
Figure 10-12 Setting the Property for the ToolTip control
ToolTip
property sets
text that’s
displayed
when the
cursor is
rested on top
of the control
C# Programming: From Problem Analysis to Program Design
46
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
Menu Event Handler Methods
private void menuExit_Click(object sender, System.EventArgs e)
{
Application.Exit( );
}
private void menuAbout_Click(object sender, System.EventArgs e)
{
MessageBox.Show("Gardening Guide Application\n\n\nVersion"
+ " 1.0", "About Gardening");
}
C# Programming: From Problem Analysis to Program Design
47
C# Programming: From Problem Analysis to Program Design
48
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
Adding Predefined Standard
Windows Dialog Boxes
C# Programming: From Problem Analysis to Program Design
49
Figure 10-13 Adding dialog controls to menu options
C# Programming: From Problem Analysis to Program Design
50
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 10-15
Font dialog box menu option
C# Programming: From Problem Analysis to Program Design
51
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
52
Figure 10-14 Color dialog box menu option
Adding Predefined Standard
Windows Dialog Boxes – Color
GardeningForm App
• Three separate source code files are created for
this Windows application with ListBox and
ComboBox
– One file has Main( ) method – default name Program.cs
• No changes made to this file
– Other two files’ headings include partial class definition
• .Designer.cs file has all autogenerated code from
dragging and dropping controls and changing property
values
• .cs file has event handler methods
C# Programming: From Problem Analysis to Program Design
53
Review GardeningForm Example
C# Programming: From Problem Analysis to Program Design
54
GardeningForm Properties
Table 10-4 GardeningForm property values
Each entry
has an
associated
statement in
the
.Designer.cs
file
C# Programming: From Problem Analysis to Program Design
55
GardeningForm Properties (continued)
Table 10-4 GardeningForm property values (continued)
C# Programming: From Problem Analysis to Program Design
56
GardeningForm Properties (continued)
Table 10-4 GardeningForm property values (continued)
GardeningForm Properties (continued)
C# Programming: From Problem Analysis to Program Design
57
Table 10-4 GardeningForm property values (continued)
GardeningForm Events
C# Programming: From Problem Analysis to Program Design
58
Table 10-5 GardeningForm events
CheckBox and RadioButton
Objects
• New Project is created
– Windows Application
• CheckBox and RadioButton objects added like
other objects
– Drag and drop controls
– Set BackColor properties
– Set Title bar using Text property
– Name controls
C# Programming: From Problem Analysis to Program Design
59
C# Programming: From Problem Analysis to Program Design
60
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
61
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
CheckBox Control
• Originally default event handler method for the
Swim CheckBox object was: private void ckBxSwim_CheckedChanged (object sender,
System.EventArgs e) { }
• The heading for ckBxSwim_CheckedChanged( )
changed to ComputeCost_CheckedChanged ( ) private void ComputeCost_CheckedChanged (object sender,
System.EventArgs e) { }
C# Programming: From Problem Analysis to Program Design
62
Method name more generic so it can
be used with multiple controls
C# Programming: From Problem Analysis to Program Design
63
GroupBox Objects
• GroupBox provides an identifiable group for controls – gives you a heading
– Objects may be grouped together for visual appearance
– Can move or set properties that impact the entire group
• 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
64
RadioButton Objects
• Appear as small circles
• Give users a choice between two or more options
– Not appropriate to select more than one
RadioButton object (from a group)
• 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
65
Adding RadioButton Objects
Figure 10-16 GroupBox and RadioButton objects added
Box drawn
around
RadioButton
objects is
from
GroupBox
C# Programming: From Problem Analysis to Program Design
66
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
Wiring One Event Handler to
Multiple Objects (continued)
C# Programming: From Problem Analysis to Program Design
67
Figure 10-17 Wired Click events
Each
CheckBox
and
RadioButton
wired to
same
method
C# Programming: From Problem Analysis to Program Design
68
RadioButton Objects (continued)
• ComputeCost_CheckedChanged( ) method
if (this.radBeginner.Checked)
{
cost +=10;
this.lblMsg.Text = "Beginner " +
"-- Extra $10 charge";
}
else
// more statements
Review RegistrationApp Example
C# Programming: From Problem Analysis to Program Design
69
ComputeCost_CheckChanged( ) and
Click( ) Events Raised
Figure 10-18 ComputeCost_CheckedChanged( ) and Click( )
events raised
Windows Presentation
Foundation
• WPF Application – one of options for Windows
projects
• Vector-based and resolution-independent → sharp
graphics
• As with WinForms, drag and drop controls from
the Toolbox onto the window
– Set property values and register events
• Some of the names are different (Use Content instead of
Text for buttons, labels, checkboxes and radio buttons)
C# Programming: From Problem Analysis to Program Design
70
Windows Presentation
Foundation (WPF)
C# Programming: From Problem Analysis to Program Design
71
Figure 10-19 WPF design
RegistrationApp
was recreated
using WPF
Windows Presentation
Foundation (WPF)
• Different files created
– XAML
• Resembles Hypertext Markup Language (HTML)
• HTML for Windows application
– Each control placed on design surface appears as a
separate line in the XAML file
• Beginning and ending tag for each control
– No .Designer.cs file
– .xaml.cs is the code behind file for event handlers
C# Programming: From Problem Analysis to Program Design
72
Review WPF_Example
C# Programming: From Problem Analysis to Program Design
73
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
74
TabControl Controls (continued)
Figure 10-21 Tabbed controlled application
C# Programming: From Problem Analysis to Program Design
75
TabControl Controls (continued)
Figure 10-22 TabControl object stretched to fill form
C# Programming: From Problem Analysis to Program Design
76
TabControl Controls (continued)
• TabPage property
enables you to
format individual
tabs
• Clicking the
ellipsis beside the
Collection value
displays the
TabPage
Collection Editor
Figure 10-23 TabControl's TabPage Collection Editor
TabControl Controls (continued)
• To indicate tabPage2 should be on top
tabControl1.SelectedTab = tabPage2;
• Can display images on tabs and change the
background or foreground colors
– Tabs can be displayed vertically instead of horizontally
using the Alignment property
• Can register Click events for each of the tabs
C# Programming: From Problem Analysis to Program Design
77
Review PizzaApp Example
C# Programming: From Problem Analysis to Program Design
78
DinerGUI
Application
Example
Figure 10-24 Problem specification for DinerGUI example
C# Programming: From Problem Analysis to Program Design
79
Table 10-6 Order class data fields
DinerGUI (continued)
C# Programming: From Problem Analysis to Program Design
80
DinerGUI (continued)
Figure 10-25 Prototype for DinerGUI example
C# Programming: From Problem Analysis to Program Design
81
DinerGUI
(continued)
Figure 10-26 Class diagrams
C# Programming: From Problem Analysis to Program Design
82
Figure 10-27 Pseudocode for the Order class for DinerGUI
DinerGUI (continued)
C# Programming: From Problem Analysis to Program Design
83
Figure 10-28
Pseudocode for
RadioButton,
CheckBox,
ListBox, and
ComboBox
object event
handlers
DinerGUI
(continued)
C# Programming: From Problem Analysis to Program Design
84
Figure 10-29 Pseudocode for menu object event handlers
DinerGUI
(continued)
C# Programming: From Problem Analysis to Program Design
85
Figure 10-30 Pseudocode for menu object event handlers and
ClearDrinks( ) method
DinerGUI
(continued)
C# Programming: From Problem Analysis to Program Design
86
DinerGUI (continued)
Table 10-7 DinerGUI property values
C# Programming: From Problem Analysis to Program Design
87
DinerGUI (continued)
Table 10-7 DinerGUI property values (continued)
C# Programming: From Problem Analysis to Program Design
88
DinerGUI (continued)
Table 10-7 DinerGUI property values (continued)
C# Programming: From Problem Analysis to Program Design
89
DinerGUI (continued)
Table 10-7 DinerGUI property values (continued)
C# Programming: From Problem Analysis to Program Design
90
DinerGUI (continued)
Table 10-7 DinerGUI property values (continued)
C# Programming: From Problem Analysis to Program Design
91
DinerGUI (continued)
Figure 10-31 Interface showing menu selections
private Order newOrder;
private void OrderGUI_Load(object sender,
System.EventArgs e)
{
newOrder = new Order( );
for (int i = 0; i < newOrder.menuEntree.Length; i++)
{
this.lstBxEntree.Items.Add(newOrder.menuEntree[i]);
}
}
C# Programming: From Problem Analysis to Program Design
92
DinerGUI (continued)
private void lstBxEntree_SelectedIndexChanged
(object sender,System.EventArgs e)
{
newOrder.Entree = this.lstBxEntree.Text;
}
private void cmboSpecial_SelectedIndexChanged
(object sender, System.EventArgs e)
{
newOrder.SpecialRequest = this.cmboSpecial.Text;
}
C# Programming: From Problem Analysis to Program Design
93
DinerGUI (continued)
Review Diner Example
C# Programming: From Problem Analysis to Program Design
94
DinerGUI (continued)
Figure 10-32 Message displayed from Place Order menu option
C# Programming: From Problem Analysis to Program Design
95
Figure 10-33 Message displayed from Current Order menu option
DinerGUI (continued)
C# Programming: From Problem Analysis to Program Design
96
DinerGUI (continued)
Figure 10-34 Special Requests click event fired
C# Programming: From Problem Analysis to Program Design
97
DinerGUI (continued)
Figure 10-34 Clear Order click event fired
C# Programming: From Problem Analysis to Program Design
98
DinerGUI (continued)
Table 10-8 DinerGUI events
C# Programming: From Problem Analysis to Program Design
99
DinerGUI (continued)
Table 10-8 DinerGUI events
Coding Standards
• Follow a consistent naming standard for controls
• Before you register events, such as button click
events, name the associated control
C# Programming: From Problem Analysis to Program Design
100
Resources
Visual Studio 2012 - Getting Started Tutorials –
http://msdn.microsoft.com/en-us/library/dd492171.aspx
Visual C# Windows Forms Tutorials
http://visualcsharptutorials.com/windows-forms
C# Programmers Reference: Delegates Tutorial –
http://msdn.microsoft.com/en-
us/library/aa288459(VS.71).aspx
C# Programming: From Problem Analysis to Program Design
101
Resources
Delegates and Events in C#/.NET –
http://www.akadia.com/services/dotnet_delegates_and_events
.html
Geekpedia - ListBox and CheckedListBox –
http://www.geekpedia.com/tutorial40_ListBox-and-
CheckedListBox.html
CodeGuru - Create a Dynamic Menu Using C# –
http://www.codeguru.com/csharp/csharp/cs_misc/designtechn
iques/article.php/c15661/
C# Programming: From Problem Analysis to Program Design
102
C# Programming: From Problem Analysis to Program Design
103
Chapter Summary
• Delegates
• Event-handling procedures
– Registering an event
• ListBox control for multiple selections
• ComboBox versus ListBox objects