c# programming: from problem analysis to program design1 9 programming based on events
TRANSCRIPT
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 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