View
225
Download
4
Tags:
Embed Size (px)
Citation preview
Programación en Visual Basic
Lección #4: Estructuras de Repetición (Ciclos) y Controles de Listas
Por Antonio F. Huertas
Contenido
Enunciado Do...LoopEnunciado For...NextCiclos anidadosEnunciados Exit Do y Exit ForControles de listas: ComboBox, ListBox
Enunciado For Each...Next
Enunciado Do...Loop
El enunciado más general para indicar estructuras de repetición es el enunciado Do..Loop.Formatos:
Do While condición
Enunciado(s)
Loop
Do
Enunciado(s)
Loop While condición
Do Until condición
Enunciado(s)
Loop
Do
Enunciado(s)
Loop Until condición
Enunciado Do...Loop (cont.)
Cuando la condición se revisa al principio es posible que el cuerpo del ciclo nunca se ejecute.Cuando la condición se revisa al final es el cuerpo del ciclo se ejecutará por lo menos una vez.La condición del Until es la opuesta a la condición del While correspondiente.
Enunciado Do...Loop (cont.) – contando de 1 a 10
Dim n As Integer
n = 1Do While n <= 10 lstOut.Items.Add(n) n = n + 1Loop
n = 1Do lstOut.Items.Add(n) n = n + 1Loop While n <= 10
n = 1Do Until n > 10 lstOut.Items.Add(n) n = n + 1Loop
n = 1Do lstOut.Items.Add(n) n = n + 1Loop Until n > 10
Enunciado For…Next
El enunciado For…Next es usado comúnmente para ciclos controlados por contador ya que incremente la variable de control de forma automática después de ejecutar el cuerpo del ciclo.Formato:
For variable = inicio To fin [Step cantidad]
Enunciado(s)
Next
Enunciado For…NextPara contar de uno en uno:
For n = 1 To 10
lstOut.Items.Add(n)
Next
Para contar de dos en dos:For n = 1 To 10 Step 2
lstOut.Items.Add(n)
Next
Para contar hacia atrás:For n = 10 To 1 Step -1
lstOut.Items.Add(n)
Next
Ejemplo del uso de ciclos
Ejemplo del uso de ciclos (cont.)Private Sub btnTotal_Click(…) Handles btnTotal.Click
Dim n As Integer = 1
Dim sum As Single = 0.0
Dim value As Single
txtValues.Clear()
txtResult.Clear()
Do While n <= 5
value = Val(InputBox("Enter a value:"))
sum += value
txtValues.Text = txtValues.Text & value & " "
n += 1
Loop
txtResult.Text = "Total is " & sum
btnClear.Focus()
End Sub
Ejemplo del uso de ciclos (cont.)Private Sub btnAverage_Click(…) Handles btnAverage.Click Dim n As Integer = 1 Dim sum As Single = 0.0 Dim value, average As Single
txtValues.Clear() txtResult.Clear() Do value = Val(InputBox("Enter a value:")) sum += value txtValues.Text = txtValues.Text & value & " " n += 1 Loop Until n > 5 average = sum / 5 txtResult.Text = "Average is " & average btnClear.Focus()End Sub
Ejemplo del uso de ciclos (cont.)Private Sub btnMaximum_Click(…) Handles btnMaximum.Click : : txtValues.Clear() txtResult.Clear() value = Val(InputBox("Enter a value:")) txtValues.Text = txtValues.Text & value & " " max = value For n = 2 To 5 value = Val(InputBox("Enter a value:")) txtValues.Text = txtValues.Text & value & " " If value > max Then max = value End If Next txtResult.Text = "Maximum is " & max btnClear.Focus()End Sub
Ejemplo del uso de ciclos (cont.)Private Sub btnMinimum_Click(…) Handles btnMinimum.Click : : txtValues.Clear() txtResult.Clear() value = Val(InputBox("Enter a value:")) txtValues.Text = txtValues.Text & value & " " min = value For n = 2 To 5 value = Val(InputBox("Enter a value:")) txtValues.Text = txtValues.Text & value & " " If value < min Then min = value End If Next txtResult.Text = "Minimum is " & min btnClear.Focus()End Sub
Ciclos anidadosEjemplo: Para un grupo de 20 estudiantes se desea preguntar 3 puntuaciones y mostrar el promedio de cada estudiante en un list box.
Dim s, e As IntegerDim score, sum, average As SinglelstOut.Items.Clear()For s = 1 To 20 sum = 0 For e = 1 To 3 score = Val(InputBox("Enter score:", "Exam #" & e)) sum += score Next average = sum / 3 lstOut.Items.Add("Average of student #" & s & _ " is " & average)Next
Enunciados Exit Do y Exit For
El enunciado Exit Do es utilizado para terminar inmediatamente la ejecución de un ciclo Do…Loop.El enunciado Exit For es utilizado para terminar inmediatamente la ejecución de un ciclo For…Next.
For attempt = 1 To 3 secretWord = InputBox("Enter the secret word:") If secretWord = "BASIC" Then Exit For Else MsgBox("Wrong word! Try again…") End IfNextIf secretWord <> "BASIC" Then MsgBox("Too many guesses!")End If
Control ListBoxMuestra una lista de valores y permite seleccionar uno o más de éstos. Prefijo es “lst”.Propiedades importantes: Items – colección de valores que se muestran SelectedIndex y SelectedItem – índice y texto
del valor seleccionado Text – texto del valor seleccionado SelectedIndices y SelectedItems – colección de
índices y textos de los valores seleccionados SelectionMode – indica si se puede seleccionar
0, 1 ó varios valores Sorted – indica si los valores se presentarán
ordenados ascendentemente
Control ListBox (cont.)
Método importante: FindString(string) – devuelve el índice del
string en la lista si lo encuentra o la constante ListBox.NoMatches
Propiedades importantes de Item: Items.Count – devuelve la cantidad de
valores en la lista Items.Item(índice) – devuelve el valor en el
índice indicado
Control ListBox (cont.)
Métodos importantes de la propiedad Item: Items.Clear() – para borrar todos los valores Items.Add(valor) – para añadir un valor al
final de la lista Items.Insert(índice, valor) - para añadir un
valor en el índice indicado. Conlleva movimiento de valores.
Items.Remove (valor) – para remover un valor Items.RemoveAt (índice) – para remover el
valor en el índice indicado. Conlleva movimiento de valores.
Control ListBox (cont.)
Eventos importantes: Click y DoubleClick – ocurren cuando se
selecciona un valor en la lista. Click también ocurre cuando se uno presiona y para moverse a través de la lista. Por esto se prefiere DoubleClick.
SelectedIndexChanged – ocurre cuando cambia el índice del valor seleccionado en la lista.
Control ListBox (cont.)
Control ListBox (cont.)Private Sub btnExecute_Click(…) Handles btnExecute.Click Dim word As String Dim limit, index As Integer If radAdd.Checked Then word = InputBox("Enter a word:") lstWords.Items.Add(word) ElseIf radInsert.Checked Then word = InputBox("Enter a word:") limit = lstWords.Items.Count - 1 index = Val(InputBox("Enter a positive integer:")) Do While index > limit MsgBox("Index must be between 0 and " & _ limit, MsgBoxStyle.Exclamation) index = Val(InputBox("Enter a positive " & _ "integer:")) Loop lstWords.Items.Insert(index, word)
Control ListBox (cont.)
ElseIf radRemove.Checked Then word = lstWords.SelectedItem lstWords.Items.Remove(word) Else limit = lstWords.Items.Count - 1 index = Val(InputBox("Enter a positive integer:")) Do While index > limit MsgBox("Index must be between 0 and " & _ limit, MsgBoxStyle.Exclamation) index = Val(InputBox("Enter a positive " & _ "integer:")) Loop lstWords.Items.RemoveAt(index) End IfEnd Sub
Control ComboBox
Permite seleccionar un valor de entre una lista o entrar un valor. Prefijo es “cbo”.Propiedades importantes: DropDownStyle – indica el estilo del combo
box. Normalmente es DropDown (seleccionar un valor o entrarlo) o DropDownList (sólo seleccionar un valor).
Text – el valor seleccionado en el combo box. Disponible en el Properties Window y en código
NOTA: Las propiedades, métodos y eventos mencionados para el ListBox también aplican al ComboBox.
Enunciado For Each…Next
Este enunciado permite recorrer los elementos en una colección y ejecutar una operación para cada elemento examinado.Formato:
For Each objeto In colecciónEnunciado(s)
Next
Una colección es un conjunto de artículos tratados como una unidad. Ejemplo: las propiedades Items, SelectedIndices y SelectedItems en un ListBox.
Enunciado For Each…Next (cont.)
Ejemplo: Copiar todos los valores de un ListBox a otro.
Dim item As ObjectFor Each item In lstFirst.Items lstSecond.Items.Add(item)Next
Ejemplo: Borrar todos los TextBoxes de un formulario.
Dim ctrl As ControlFor Each ctrl In Controls If TypeOf ctrl Is TextBox Then ctrl.Text = "" End IfNext