Microsoft Visual C#.NET: From Problem Analysis to Program Design1 Chapter 9 Programming Based on...
-
Upload
darlene-chase -
Category
Documents
-
view
233 -
download
1
Transcript of Microsoft Visual C#.NET: From Problem Analysis to Program Design1 Chapter 9 Programming Based on...
Microsoft Visual C# .NET: From Problem Analysis to Program Design 1
Chapter 9Programming Based on
Events
Microsoft Visual C# .NET: From Problem Analysis to Program Design
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 3
Chapter Objectives (continued)
• Add Menu 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
Microsoft Visual C# .NET: 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
• Unlike a method, the return type of a delegate becomes part of its identifying signature
Microsoft Visual C# .NET: From Problem Analysis to Program Design 5
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( )
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: 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
• 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
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 10
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 .NET to indicate the current instance of a class
Microsoft Visual C# .NET: 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 runtime
• Includes number of properties and events
– Items property used to set initial values
• Click on (Collections) to add items
Microsoft Visual C# .NET: From Problem Analysis to Program Design 12
Adding a ListBox Control Object
Add ListBox control,
then click on Items property
(Collection) to type entries
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 14
ListBox Control Objects (continued)• Register its event with the System.EventHandler
delegatethis.lstBoxEvents.SelectedIndexChanged += new
System.EventHandler (this.listBox1_SelectedIndexChanged);
• Visual Studio .NET adds event handler method
private void listBox1_SelectedIndexChanged
(object sender, System.EventArgs e)
{
}
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 16
ListBox Control Objects (continued)
Microsoft Visual C# .NET: 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 of mouse
– MultiExtended can also use Ctrl key, Shift key, and arrow keys
foreach(string activity in lstBoxEvents.SelectedItems)
{
result += activity + " ";
}
this.txtBoxResult.Text = result;
Microsoft Visual C# .NET: From Problem Analysis to Program Design 18
ListBox Control Objects (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 19
ListBox Control Objects (continued)• SelectedItem and SelectedItems returns 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 runtime 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);
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design 20
ListBoxExample
Microsoft Visual C# .NET: From Problem Analysis to Program Design 21
ListBoxExample—Properties Set
Microsoft Visual C# .NET: From Problem Analysis to Program Design 22
ListBoxExample—Properties Set (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 23
Properties of the ListBox Class
Microsoft Visual C# .NET: From Problem Analysis to Program Design 24
Methods of the ListBox Class
Remember ListBox object also
inherits members
from Control
class
Microsoft Visual C# .NET: From Problem Analysis to Program Design 25
ComboBox Controls
Extra TextBox object with ComboBox—User selects from list or types new value
Microsoft Visual C# .NET: 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)
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: 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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 29
Programming Event Handlers (continued)
KeyPress( ) event
handler method
fired with each
keystroke
Microsoft Visual C# .NET: From Problem Analysis to Program Design 30
Menu Control Objects
Drag MainMenu control to form,
then click here to display Menu
structure
Microsoft Visual C# .NET: From Problem Analysis to Program Design 31
Menu Control Objects (continued)• Preceding the character
with an ampersand (&) places an underline under the next character typed – F&ormat—creates Format
and Alt+o becomes the shortcut
• Also have Shortcut property– Can associate any key
combination to Menu options
Microsoft Visual C# .NET: From Problem Analysis to Program Design 32
Menu Control Objects (continued)• To create separators,
right-click on the text label (below the needed separator)
• Select Insert Separator
Microsoft Visual C# .NET: From Problem Analysis to Program Design 33
Menu Control Objects (continued)
Set the Menu property on
the form to the name of the MainMenu
object
Microsoft Visual C# .NET: From Problem Analysis to Program Design 34
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 35
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 36
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 37
Adding Predefined Standard Windows Dialog Boxes—Color
(continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 38
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 ;
}
}
Microsoft Visual C# .NET: From Problem Analysis to Program Design 39
GardeningForm Application
Microsoft Visual C# .NET: From Problem Analysis to Program Design 40
GardeningForm Application (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 41
GardeningForm Application (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 42
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 43
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 44
CheckBox Object
Microsoft Visual C# .NET: From Problem Analysis to Program Design 45
GroupBox Objects (continued)• 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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 46
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 47
RadioButton Objects (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 48
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
Microsoft Visual C# .NET: From Problem Analysis to Program Design 49
RadioButton Objects (continued)
if(this.radBeginner.Checked){ cost +=10; this.lblMsg.Text = "Beginner “ + “-- Extra $10 charge";}else// more statements
Microsoft Visual C# .NET: From Problem Analysis to Program Design 50
ComputeCost_CheckChanged( ) and
Click( ) events raised
Microsoft Visual C# .NET: From Problem Analysis to Program Design 51
DinerGui Application Example
Microsoft Visual C# .NET: From Problem Analysis to Program Design 52
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 53
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 54
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 55
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 56
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 57
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 58
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 59
Properties—DinerGui Application
Microsoft Visual C# .NET: From Problem Analysis to Program Design 60
Properties—DinerGui Application (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 61
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 62
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 63
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 64
DinerGui Application Example (continued)
Microsoft Visual C# .NET: From Problem Analysis to Program Design 65
Chapter Summary• Delegates
• Event-handling procedures
– Registering an event
• ListBox control for multiple selections
• ComboBox versus ListBox objects
• Menu controls
• RadioButton versus CheckBox objects