9 Programming Based on Events C# Programming: From Problem Analysis to Program Design 2nd Edition David McDonald, Ph.D. Director of Emerging Technologies Chapter Objectives 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 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 1
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 Adding a ListBox Control Object Add ListBox control, then click on Items property (Collection) to type entries Figure 9-2 String Collection Editor 2
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 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) 3
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 ListBox Control Objects (continued) Figure 9-3 SelectedIndexChanged event fired 4
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; ListBox Control Objects (continued) Figure 9-4 Multiple selections within a ListBox object 5
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); ListBoxExample Figure 9-5 Add( ) method executed inside the buttonclick event 6
ListBox Control Properties 7
ListBox Control Methods ListBox Control Methods (continued) Note that ListBox control inherits members from Control class 8
ComboBox Controls Extra TextBox object with ComboBox User selects from list or types new value Figure 9-6 ComboBox and ListBox objects 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 9
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 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 10
Programming Event Handlers KeyPress( ) eventhandler method fired with each keystroke Figure 9-8 KeyPress and SelectedIndexChanged events fired 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 11
MenuStrip Controls (continued) Drag MenuStrip control to form, then click here to display Menu structure Figure 9-9 First step to creating a menu 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 12
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 MenuStrip Control Objects 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 13
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 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 14
Adding Predefined Standard Windows Dialog Boxes Color private void menucolor_click(object sender, Retrieves the System.EventArgs e) { property setting for the Label colordialog1.color = lbloutput.forecolor; object if (colordialog1.showdialog( )!= DialogResult.Cancel ) { C lb lbloutput.forecolor = colordialog1.color; clicked } } Set to selection made current ForeColor Checks to see if Cancel button 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 15
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 Object Figure 9-17 ComputeCost_CheckedChanged( ) method raised 16
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 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 17
RadioButton Objects (example) Figure 9-18 GroupBox and RadioButton objects added 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 18
RadioButton Objects (continued) Register ComputeCost_CheckedChanged () method Figure 9-19 Wired Click event RadioButton Objects (continued) ComputeCost_CheckedChanged( ) method if (this.radbeginner.checked) { cost +=10; this.lblmsg.text = "Beginner + -- Extra $10 charge"; } else // more statements 19
ComputeCost_CheckChanged( ) and Click( ) Events Raised Figure 9-20 ComputeCost_CheckedChanged( ) and Click( ) events raised 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 20
TabControl Controls (continued) Figure 9-21 Tabbed controlled application TabControl Controls (continued) Figure 9-22 TabControl object stretched to fill form 21
TabControl Controls (continued) TabPage property enables you to format individual tabs Clicking the ellipsis beside the Collection value displays the TabPage Collection Editor 22