660 likes | 676 Views
Learn to define, create, and use delegates in C# programming to handle events effectively. Explore ListBox and ComboBox controls, work with Menu and TabControl options, and create event-driven applications using delegates. Master event handling in C# programs.
E N D
9 Programming Based on Events C# Programming: From Problem Analysis to Program Design 2nd Edition C# Programming: From Problem Analysis to Program Design
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
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
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
Delegates (continued) • Delegate declaration example delegatestring ReturnsSimpleString( ); • Delegate signature • Identifies what types of methods the delegate represents • Above Example represents methods that return a string and require no argument staticstring EndStatement( ) staticstring ToString( ) staticstring ReturnSaying( ) C# Programming: From Problem Analysis to Program Design
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
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
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
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
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
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
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
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
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 privatevoid listBox1_SelectedIndexChanged (object sender, System.EventArgs e) { } C# Programming: From Problem Analysis to Program Design
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
ListBox Control Objects (continued) Figure 9-3 SelectedIndexChanged event fired C# Programming: From Problem Analysis to Program Design
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
ListBox Control Objects (continued) Figure 9-4 Multiple selections within a ListBox object C# Programming: From Problem Analysis to Program Design
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"); privatevoid btnNew_Click(object sender, System.EventArgs e) { lstBoxEvents.Items.Add(txtBoxNewAct.Text); } C# Programming: From Problem Analysis to Program Design
ListBoxExample Figure 9-5 Add( ) method executed inside the buttonClick event C# Programming: From Problem Analysis to Program Design
ListBox Control Properties C# Programming: From Problem Analysis to Program Design
ListBox Control Methods C# Programming: From Problem Analysis to Program Design
ListBox Control Methods (continued) Note that ListBox control inherits members from Control class C# Programming: From Problem Analysis to Program Design
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
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
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
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
Programming Event Handlers (continued) KeyPress( ) event-handler method fired with each keystroke Figure 9-8 KeyPress and SelectedIndexChanged events fired C# Programming: From Problem Analysis to Program Design
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 objectto 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
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
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
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
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
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
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
Adding Predefined Standard Windows Dialog Boxes– Color Retrieves the current ForeColor property setting for the Label object privatevoid menuColor_Click(object sender, System.EventArgs e) { colorDialog1.Color = lblOutput.ForeColor; if (colorDialog1.ShowDialog( ) != DialogResult.Cancel ) { lblOutput.ForeColor = colorDialog1.Color; } } Checks to see if Cancel button clicked Set to selection made C# Programming: From Problem Analysis to Program Design
Adding Predefined Standard Windows Dialog Boxes– Color (continued) Figure 9-14 Color dialog box menu option C# Programming: From Problem Analysis to Program Design
Adding Predefined Standard Windows Dialog Boxes– Font privatevoid 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
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
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
Wiring One Event Handler to Multiple Objects (continued) Figure 9-16 Wiring the event-handler method C# Programming: From Problem Analysis to Program Design
CheckBox Object Figure 9-17 ComputeCost_CheckedChanged( ) method raised C# Programming: From Problem Analysis to Program Design
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
RadioButton Objects • Appear as small circles • Give users a choice between two or more options • Not appropriate to select more than one CheckBox objectwith 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
RadioButton Objects (continued) Figure 9-18 GroupBox and RadioButton objects added C# Programming: From Problem Analysis to Program Design