Visual Basic Looping Statements, Input Boxes, and List Boxes
E N D
Presentation Transcript
Week 6 Lists, Loops, Validation, and More
Introduction • This chapter covers the Visual Basic looping statements • Do … While • Do … Until • For … Next • It also discusses the use of • List Boxes • Combo Boxes • As well as presenting some properties and events used for user input validation
Input Boxes Input Boxes Provide a Simple Way to Gather Input Without Placing a Text Box on a Form
Format of the InputBox Function InputBox(Prompt [,Title] [,Default] [,Xpos] [,Ypos]) • Prompt - message to the user (required) • Title - text for the box's title bar • Default - default text for user's input • Xpos - X coordinate for the box's position • Ypos - Y coordinate for the box's position • Square brackets around Title and following arguments indicate these are optional
Sample InputBox Usage strUserInput = InputBox("Enter the distance.", _ "Provide a Value", "150") • If the users clicks OK without entering a value, 150 will be assigned to strUserInput due to the default value
Xpos & Ypos • Xpos specifies the distance from the left of the screen to the left side of the box • Ypos specified the distance from the top of the screen to the top of the box • Both are specified in pixels
List Boxes List Boxes Display a List of Items and Allow the User to Select an Item From the List
The ListBox Control A ListBox control displays a list of items and allows the user to select one or more Drag from Toolbox to create this control on a form
ListBox Items Property • The Items property holds an entire list of values from which the user may choose • The list of values may be established at run time or as part of the form design • To set list values in the form design: • Select the list box in the Design window • View properties & click the Items ellipsis button • This property is a collection, a list of values • Type each value on a separate line
ListBox Items.Count Property • This property returns an integer with the number of entries stored in the Items property • Example of use: • The number of entries in the list can be assigned to an integer variable If lstEmployees.Items.Count = 0 Then MessageBox.Show("The list has no items!") End If numEmployees = lstEmployees.Items.Count
Item Indexing • The Items property values can be accessed from your VB code • Each item value is given a sequential index • The first item has an index of 0 • The second item has an index of 1, etc. • Example: name = lstCustomers.Items(2) ' Access the 3rd item value
ListBox SelectIndex Property • The SelectIndex property returns an integer with the index of the item selected by the user • If no item is selected, the value is set to -1 (an invalid index value) • Can use SelectIndex to determine if an item has been selected by comparing to -1 • Example: If lstLocations.SelectedIndex <> -1 Then location = lstLocations.Items(lstLocations.SelectedIndex) End If
ListBox SelectedItem Property • Instead of using the SelectedIndex property as follows: • The SelectedItem property can be used to retrieve the value of a selected item as follows: If lstMonths.SelectedIndex <> -1 Then month = lstMonths.Items(lstMonths.SelectedIndex) End If If lstMonths.SelectedIndex <> -1 Then month = lstMonths.SelectedItem.ToString) End If
ListBox Sorted Property • Sorted is a boolean property • When set to true, values in the Items property are displayed in alphabetical order • When set to false, values in the Items property are displayed in the order they were added
ListBox Items.Add Method • Items can be added to the end of a ListBox list in your VB code using the Add method • Format is ListBox.Items.Add(Item) • ListBox is the name of the control • Item is a string value to add to the Items property • Example: lstStudents.Items.Add("Sharon")
ListBox Items.Insert Method • Items can be added at a specific position of a ListBox in VB code using the Insert method ListBox.Items.Insert(Index, Item) • Index specifies position where Item is placed • Index is zero based similar to SelectedIndex property • Items that follow are “pushed” down • Example inserting "Jean“ as the 3rd item lstStudents.Items.Insert(2, "Jean")
ListBox Methods to Remove Items • ListBox.Items.RemoveAt(Index) • Removes item at the specified index • ListBox.Items.Remove(Item) • Removes item with value specified by Item • ListBox.Items.Clear() • Removes all items in the Items property • Examples: lstStudents.Items.RemoveAt(2) ‘remove 3rd item lstStudents.Items.Remove(“Jean”) ‘remove item Jean lstStudents.Items.Clear() ‘remove all items
Other ListBox Methods • ListBox.Items.Contains(Item) • Returns true if Item is found in the collection • ListBox.Items.IndexOf(Item) • Returns an integer with the index position of the first occurrence of Item in the collection • Examples: blnFound = lstMonths.Items.Contains(“March”) intIndex = lstMonths.Items.IndexOf(“March”)
The Do While Loop A Loop Is Part of a ProgramThat Repeats
Repetition Structure (or Loop) • Visual Basic has three structures that allow a statement or group of statements to repeat • Do While • Do Until • For...Next
Expression statement(s) True False Do While Flowchart • The Do While loop • If the expression is true, the statement(s)are executed • Expression is thenevaluated again • As long as the expression remains true, the statement(s) continue to be repeated
Do While Syntax • Do, While, and Loop are new keywords • The Do While statement marks the beginning of the loop • The Loop statement marks the end • The statements to repeat are found between these and called the body of the loop Do While expression statement(s) Loop
Do While Example Private Sub btnRunDemo_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnRunDemo.Click ' Demonstrate the Do While loop Dim intCount As Integer = 0 Do While intCount < 10 lstOutput.Items.Add("Hello") intCount = intCount + 1 Loop End Sub Note that programming styledictates the body of theloop be indented for clarity
Infinite Loops • A loop must have some way to end itself • Something within the body of the loop must eventually force the test expression to false • In the previous example • The loop continues to repeat • intCount increases by one for each repetition • Finally intCount is not <10 and the loop ends • If the test expression can never be false, the loop will continue to repeat forever • This is called an infinite loop
Counters • Variables called counters are frequently used to control Do While loops • intCount in previous example is a counter • Counters generally initialized before loop begins Dim intCount As Integer = 0 • Counter must be modified in body of loop intCount = intCount + 1 • The test expression ends the loop when the counter compares to some value
Pretest vs. Posttest Loops • Previous Do While loops are in pretest form • Expression is tested before the body of the loop is executed • The body may not be executed at all • Do While loops also have a posttest form • The body of the loop is executed first • Then the expression is evaluated • Body repeats as long as expression is true • A posttest loop always executes the body of the loop at least once
Posttest Loop Syntax and Flowchart • The statement(s) mustbe executed at leastonce, irrespective of the expression used Do statement(s) Loop While expression statement(s) Expression True False
A Posttest Running Total Loop intCount = 1 ' Initialize the counter decTotal = 0 ' Initialize total Do strInput = InputBox("Enter the sales for day " & _ intCount.ToString, "Sales Amount Needed") If strInput <> "" Then decSales = CDec(strInput) decTotal = decTotal + decSales ' Add sales to total intCount = intCount + 1 ' Increment the counter End If Loop While intCount <= 5
The Do Until andFor Next Loops A Do Until Loop Iterates Until Its Test Expression Is True The For...Next Loop Is Designed to Use a Counter Variable and Iterates a Specific Number of Times
Do Until vs. Do While • A Do While loop • Repeats as long as its test expression is true • Ends when its test expression becomes false • A Do Until loop • Repeats as long as its test expression is false • Ends when its test expression becomes true • The Do Until loop has a pretest and posttest form just as a Do While loop
Do Until: Pretest & Posttest Forms • Pretest: • Posttest: Do Until expression statement(s) Loop Do statement(s) Loop Until expression
Do Until Loop – Test Score Average strInput = InputBox("How many test scores do you " _ & “want to average?", "Enter a Value") intNumScores = CInt(strInput) ‘ Store starting values sngTotal = 0 intCount = 1 ‘ Get the test scores Do Until intCount > intNumScores strInput = InputBox("Enter the value for test score " _ & intCount.ToString, "Test Score Needed") sngTotal = sngTotal + CSng(strInput) intCount = intCount + 1 Loop ‘ Calculate the average If intNumScores > 0 then sngAverage = sngTotal / intNumScores Else sngAverage = 0.0 End If
For…Next Loop • Ideal for loops that require a counter • For, To, and Next are keywords • CounterVariable tracks number of iterations • StartValue is initial value of counter • EndValue is counter number of final iteration • Optional Step allows the counter to increment at a value other than 1 at each iteration of the loop For CounterVariable = StartValue To EndValue [Step] statement Next [CounterVariable]
set counter to StartValue Counter = EndValue? statement(s) increment counter False True For…Next Flowchart
For…Next Example • The following code uses a For…Next loop to place the squares of the numbers 1 through 10 in a ListBox For intCount = 1 To 10 intSquare = CInt(intCount ^ 2) strTemp = "The square of " & intCount.ToString _ & “ is “ & intSquare.ToString lstOutput.Items.Add(strTemp) Next intCount
More on the StepValue • It’s optional and if not specified, defaults to 1 • The following loop iterates 11 times with counter values 0, 10, 20, …, 80, 90, 100 • StepValue may be negative, causing the loop to count downward For x = 0 To 100 Step 10 MessageBox.Show("x is now " & x.ToString) Next x For x = 10 To 1 Step -1 MessageBox.Show("x is now " & x.ToString) Next x
Example: User Specify End Value Dim intCount, intMaxNumbers As Integer Dim dblTotal As Double = 0 Dim dblNum As Double Dim strInput As String intMaxNumbers = CInt(InputBox("How many numbers do " & _ "you wish to sum?")) For intCount = 1 to maxNumbers strInput = InputBox("Enter a number.") dblNum = CDbl(strInput) dblTotal = dblTotal + dblNum Next intCount MessageBox.Show(“Sum of the numbers is " & total.ToString)
When to Use the Do While Loop • Use Do While when the loop should repeat as long as the test expression is true • Can be written as a pretest or posttest loop • A pretest Do While is ideal when the body should not be perfomed for a test expression that is initially false • Posttest loops are ideal when you always want the loop to iterate at least once
When to Use the Do Until Loop • Use Do Until when the loop should repeat as long as the test expression is false • Can be written as a pretest or posttest loop • A pretest Do Until is ideal when the body should not be perfomed for a test expression that is initially true • Posttest loops are ideal when you always want the loop to iterate at least once
When to Use the For Next Loop • The For...Next loop is a pretest loop ideal when a counter is needed • It automatically increments the counter variable at the end of each iteration • The loop repeats as long as the counter variable is not greater than an end value • Used primarily when the number of required iterations is known
Nested Loops A Loop that is Inside Another Loop is Called a Nested Loop
Nested Loops • The body of a loop can contain any type of VB statements including another loop • When a loop is found within the body of another loop, it’s called a nested loop
Nested Loop Example • A clock is an example of a nested loop • Minute hand repeats 60 times for each hour • Second hand repeats 60 times for each minute For intHours = 0 To 24 lblHours.Text = intHours.ToString For intMinutes = 0 To 59 lblMinutes.Text = intMinutes.ToString For intSeconds = 0 To 59 lblSeconds.Text = intSeconds.ToString Next intSeconds Next intMinutes Next intHours
Nested Loop Example Analysis • The innermost loop will iterate 60 times for each iteration of the middle loop • The middle loop will iterate 60 times for each iteration of the outermost loop • 24 iterations of the outermost loop require: • 1,440 iterations of the middle loop • 86,400 iterations of the innermost loop • An inner loop goes through all its iterations for each iteration of the outer loop • Multiply iterations of all loops to get the total iterations of the innermost loop
Multicolumn List Boxes,Checked List Boxesand Combo Boxes A Multicolumn List Box Displays Items in ColumnsA Checked List Box Displays a Check Box Next to Each Item in the List A Combo Box Is Like a List Box Combined With a Text Box
List Box Multicolumn Property • The ListBox has a Multicolumn property • Boolean property with default value of false • If set to true, entries can appear side by side • Below, ColumnWidth is set to 30 • Note the appearance of a horizontal scroll bar in this case
Example For intNumber = 0 To 100 lstNumbers.Items.Add(intNumber) Next
Checked List Box • One item at a time may be selected but many items in a Checked List Box can be checked • The CheckOnClick property determines how items may be checked • False - user clicks item once to select it, again to check it • True - user clicks item only once to both select it and check it
Finding the Status of Checked Items • The GetItemChecked method returns true if the item at Index has been checked CheckedListBox.GetItemChecked(Index) Dim i as Integer Dim intCheckedCities as Integer = 0 For i = 0 to clbCities.Items.Count – 1 If clbCities.GetItemChecked(i) = True Then intCheckedCities += 1 End If Next i MessageBox.Show(“You checked “ & _ intCheckedCities.Tostring() & “ cities.”)
Combo Boxes Similar to List Boxes • Both display a list of items to the user • Both have Items, Items.Count, SelectedIndex, SelectedItem, and Sorted properties • Both have Items.Add, Items.Clear, Items.Remove, and Items.RemoveAt methods • These properties and methods work the same with combo boxes and list boxes